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

时间:2014-11-24 16:36:48

标签: javascript ecmascript-5 ecma262

我已经在 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。当我查看此规范时,我认为""不是字符串数字文字,应将其解析为NaNNaN不等于0.0

那么为什么上述推测不正确且0 == ""实际上是true

提前致谢。

1 个答案:

答案 0 :(得分:4)

语法允许 StringNumericLiteral 为空:

  

StringNumericLiteral :::
  的 StrWhiteSpace <子>选择
   StrWhiteSpace opt StrNumericLiteral StrWhiteSpace opt

几行下来,它说:

  

StringNumericLiteral 为空或仅包含空格会转换为 +0

  

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

所以我担心你根本没有完全阅读你正在看的标准段落。 :)