JavaScript 的 (0 == “”) === true 如何与 ECMA-262 类型转换规则一致

How JavaScript's (0 == "") === true agrees with ECMA-262 type conversion rules?

本文关键字:ECMA-262 类型转换 规则 true JavaScript      更新时间:2023-09-26

我已经看到了几个问题,解释了为什么0 == ""JavaScripttrue,但我有一个更深层次的问题。

所以为什么在 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呢?

提前谢谢。

语法允许 StringNumericLiteral 为空:

字符串数字文字 :::
    StrWhiteSpaceopt
    StrWhiteSpace opt StrNumericLiteralStrWhiteSpaceopt

往下几行,上面写着:

空的或仅包含空格的字符串数字文本将转换为 +0

和:

StringNumericLiteral 的 MV ::: [empty] 为 0。

所以恐怕你根本就没有完全读懂你正在看的标准段落。 :)