我已经在 JavaScript 中看到了几个问题,解释了为什么0 == ""
为true
,但我有一个更深层次的问题。
因此JavaScript中0 == ""
为true
原因的答案是将字符串""
转换为数字,将零长度字符串转换为零数字,但这是如何与[9.3.1 paragraph of ECMA-262](http://www.ecma-international.org/ecma-262/5.1/#sec-9.3.1)
表示应该使用给定的正式语法解析字符串,如果失败,则将此字符串转换为NaN
。当我查看此规范时,我认为""
不是字符串数字文字,应将其解析为NaN
且NaN
不等于0.0
。
那么为什么上述推测不正确且0 == ""
实际上是true
?
提前致谢。
答案 0 :(得分:4)
语法允许 StringNumericLiteral 为空:
StringNumericLiteral :::
的 StrWhiteSpace <子>选择子> 强>
StrWhiteSpace opt StrNumericLiteral StrWhiteSpace opt
几行下来,它说:
StringNumericLiteral 为空或仅包含空格会转换为 +0 。
和
StringNumericLiteral ::: [empty]的MV为0.
所以我担心你根本没有完全阅读你正在看的标准段落。 :)