【问题标题】:Why should I use string.length == 0 over string == "" when checking for empty string in ECMAScript?在 ECMAScript 中检查空字符串时,为什么我应该使用 string.length == 0 而不是 string == ""?
【发布时间】:2010-12-22 05:23:44
【问题描述】:

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

if (theString.length == 0)
    // string is empty

我通常会这样写:

if (theString == "")
    // string is empty

后一个版本对我来说似乎更具可读性和自然性。

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

我想知道为什么我应该选择第一个版本而不是第二个版本?重要的是,一个版本比另一个更好吗?出于某种原因,某个版本是否更安全或更快?

(我们实际上在符合 ECMAScript 版本 4 的 Siebel eScript 中执行此操作)

谢谢。

【问题讨论】:

    标签: javascript string-comparison ecmascript-4


    【解决方案1】:

    正确答案是正确的,理解类型检查很重要。但就性能而言,字符串比较每次都会输给 .length 方法,但损失非常小。如果您对将网站速度缩短几毫秒不感兴趣,您可能需要选择对您更易读/更易于维护的方法,更重要的是,您的团队。

    【讨论】:

    • jsperf.com/empty-string-vs-string-length 和其他几个...如此接近以至于几乎可以忽略不计,但 .length 会赢
    • 当你有更多的代表时,这真的应该作为对答案的评论......你很快就会到达那里。
    • 是的,仍然不确定如何在这里获得“代表”:-p 但我的自尊心也没有那么大,所以不会太打扰我。只是想把知识传播给我的同龄人
    • 我问了一个问题,得到了 18 个“代表点”,哇哦……伙计,自从这个网站问世以来,或者至少从 2010 年开始,我就一直在使用它。从不理解代表的事情。我想我现在明白了,但我必须想出一些奇怪的问题(或者我可能想出一些我已经知道答案的问题?)才能获得声誉。困扰我
    【解决方案2】:

    我实际上更喜欢多种语言中的这种技术,因为有时很难区分空字符串文字 "" 和其他几个字符串(" "'"')。

    但在 ECMAScript 中避免使用 theString == "" 还有另一个原因:0 == "" 的计算结果为 truefalse == ""0.0 == "" 也是如此......

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

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

    另见:

    【讨论】:

    • 好的,我做了一些测试,比较了三种方法(.length、==、===)与不同的变量:字符串、数字、布尔值和未定义。 .length 和 === 给了我相同的结果,除了 .length 在我尝试将它与 undefined 一起使用时会产生错误。我想我将从现在开始在我自己的代码中使用 ===。谢谢。
    • @Crescent Fresh:问题很大程度上与我在“另见”中链接的问题重复。在写答案之前我没有意识到这一点,但在检查它之后,我认为它已经足够了,并且不特别想从中获得进一步的代表。如果有人有替代解决方案或对此提出异议,如果他们将这些信息带入原始问题将会很有帮助......
    • @Shog9:你很有趣,而且相当大。
    【解决方案3】:

    问题是,如果 theString 设置为 0(零),您的第二个示例将评估为 true。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 2014-07-12
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多