我已经看到几个问题解释为什么0 == ""
在JavaScript中是true
,但我有一个更深层次的问题.
因此,为什么 JavaScript 中 0 == ""
为 true
的答案是字符串 ""
被转换为数字,零-length 字符串转换为零数字,但这与 [ECMA-262 的 9.3.1 段落](http://www.ecma-international.org/ecma-262/5.1/#sec-9.3 .1)
表示应该使用给定的形式语法来解析字符串,如果失败,则该字符串将转换为 NaN
。当我查看此规范时,我认为 ""
不是字符串数字文字,它应该被解析为 NaN
且 NaN
不等于到 0.0
。
那么为什么上述推测不正确,而 0 == ""
实际上是true
?
提前致谢。
最佳答案
语法允许StringNumericLiteral为空:
StringNumericLiteral :::
StrWhiteSpaceopt
StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt
下面几行写着:
A StringNumericLiteral that is empty or contains only white space is converted to +0.
和:
The MV of StringNumericLiteral ::: [empty] is 0.
所以恐怕您根本没有完全阅读您正在查看的标准段落。 :)
关于javascript - JavaScript 的 (0 == "") === true 如何符合 ECMA-262 类型转换规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109639/