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

标签 javascript string-comparison ecmascript-4

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

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

我通常会这样写:

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

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

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

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

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

谢谢。

最佳答案

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

但是在 ECMAScript 中避免 theString == "" 还有另一个原因:0 == "" 求值为 truefalse == ""0.0 == ""...

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

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

另见:

关于javascript - 在 ECMAScript 中检查空字符串时,为什么我应该使用 string.length == 0 而不是 string == ""?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1829611/

相关文章:

javascript - 通过jQuery获取重定向的URL

javascript - 遍历元素数组,用数据替换html

python - "not in"比较未按预期工作

c++ - c_str() 与 std::string - 这段小代码的真正区别是什么?

ruby - 如何在 Ruby 中进行高级字符串比较?

Javascript 可选类型提示

javascript - e2e Protractor 测试无法检测多层 Angular 路由器中的 Angular 分量

Javascript,访问其他窗口的变量

javascript - 是否可以测试不同 Ecma 脚本版本的 Javascript 代码?