Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我应该使用string.length==0而不是string="&引用;在ECMAScript中检查空字符串时?_Javascript_String Comparison_Ecmascript 4 - Fatal编程技术网

Javascript 为什么我应该使用string.length==0而不是string="&引用;在ECMAScript中检查空字符串时?

Javascript 为什么我应该使用string.length==0而不是string="&引用;在ECMAScript中检查空字符串时?,javascript,string-comparison,ecmascript-4,Javascript,String Comparison,Ecmascript 4,我当前项目中的大多数开发人员使用(对我来说)一种奇怪的方式来检查ECMAScript中的空字符串: if (theString.length == 0) // string is empty 我通常会这样写: if (theString == "") // string is empty 后一个版本对我来说更具可读性和自然性 我问过的人似乎都无法解释版本1的优点。我猜在过去的某个时候,有人告诉大家这是一种方法,但现在那个人离开了,没有人记得为什么要这样做 我想知道是否有理由我

我当前项目中的大多数开发人员使用(对我来说)一种奇怪的方式来检查ECMAScript中的空字符串:

if (theString.length == 0)
    // string is empty
我通常会这样写:

if (theString == "")
    // string is empty
后一个版本对我来说更具可读性和自然性

我问过的人似乎都无法解释版本1的优点。我猜在过去的某个时候,有人告诉大家这是一种方法,但现在那个人离开了,没有人记得为什么要这样做

我想知道是否有理由我应该选择第一个版本而不是第二个版本?这有关系吗,一个版本比另一个好吗?出于某种原因,一个版本更安全还是更快

(我们实际上是在Siebel eScript中这样做的,它符合ECMAScript版本4)


谢谢。

问题是,如果
字符串设置为
0
(零),您的第二个示例将计算为true。

我实际上更喜欢在许多语言中使用这种技术,因为有时很难区分空字符串文本
和其他几个字符串(
)“”

但是还有另一个避免使用ECMAScript中字符串的原因:
0===“true
false==“
0.0==”

…因此,除非您知道字符串
实际上是一个字符串,否则使用弱比较可能会给您自己带来问题。幸运的是,您可以通过明智地使用严格相等(
==
)运算符来避免这种情况:

if ( theString === "" )
   // string is a string and is empty
另见:

正确答案是正确的,理解类型检查很重要。但就性能而言,字符串比较每次都会输给.length方法,但数量非常少。如果您不想从站点速度中减少毫秒数,您可能希望选择对您以及更重要的是对您的团队更具可读性/可维护性的方法。

好的,我做了一些测试,比较了三种方法(.length,==,==)和不同变量:字符串、数字、布尔值和未定义。length和===给出了相同的结果,只是当我尝试将.length用于未定义时,它会生成一个错误。我想从现在开始,我将在自己的代码中使用===。谢谢。@Crescent-Fresh:这个问题很大程度上是我在“另见”中链接到的问题的重复。我没有意识到写之前的答案,但经过检查,我认为它是足够的,不特别想从中获得进一步的发言权。如果有人有其他的解决方案或者对这个问题有争议,如果他们把这些信息带到原来的问题中,那将是很有帮助的…@Shog9:很有趣,你也很了不起。还有其他几个。。。非常接近,几乎可以忽略不计,但是.length会赢当你有更多的rep时,这真的应该作为对答案的评论。。。你很快就会到的。是啊,还是不知道如何在这里得到一个‘代表’:-p但我的自我也不太强,所以不要太打扰我。只是想把知识传播给我的同伴我问了一个问题,得了18分,呜呜。。。老兄,这个网站问世后我就开始使用了,至少从2010年开始。我从来都不明白这件事。我想我现在明白了,但我必须提出一些奇怪的问题(或者我提出了一些我已经知道答案的问题?)才能赢得声誉。这让我很烦恼