【问题标题】:Why is 0 == "" true in JavaScript为什么 0 == "" 在 JavaScript 中为真
【发布时间】:2011-09-30 01:09:50
【问题描述】:

为什么 0 == "" 在 JavaScript 中为真?我找到了similar post here,但为什么数字 0 类似于空字符串?当然,0 === "" 是假的。

【问题讨论】:

  • 你的意思是 0 被“铸造”为 false,“”被铸造为 false 并且检查是 false == false => true
  • 我相信这是因为 Javascript 在某些情况下会自动强制转换字符串和数字,== 运算符就是其中之一,而 "" 会强制转换为 0。
  • @HorstWalter No. 字符串被强制转换为 Number 类型。看我的回答。
  • @Ӫ_._Ӫ 是的,我认为== 两个虚假值的比较总是评估为真。但后来我想起了NaN != NaN...整个想法都崩溃了哈哈。

标签: javascript


【解决方案1】:
0 == ''

左操作数的类型为 Number。
右操作数是字符串类型。

在这种情况下,右操作数被强制为 Number 类型:

0 == Number('')

导致

0 == 0

来自抽象等式比较算法(第 4 位):

如果 Type(x) 是 Number 并且 Type(y) 是 String,返回结果 比较 x == ToNumber(y)。

来源:http://es5.github.com/#x11.9.3

【讨论】:

  • 谢谢,我只是期待它反过来,0 转换为字符串,然后是 false。
  • 是的,另一方面,这意味着说两者都是错误的——就像在其他答案中一样,并不完全正确。因为 - 正如你很好地展示的那样 - 原因是“” => 0。感谢您的支持!
  • @Horst - 是的,没错。两者 都是 虚假的,你可以看到如果你在 if (0)if("") 中单独使用它们,但在 == 比较的情况下,情况并非如此。 (不知道为什么 Šime 还在上面留下评论说“因为这两个值都是虚假的”。)
  • 哦,我不知道 es5.github.com。比在 PDF 中输入页码要方便得多。
  • @nnnnnn 这是我的第一反应。结果证明是错误的。
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多