javascript - JavaScript 的 (0 == "") === true 如何符合 ECMA-262 类型转换规则?

标签 javascript ecmascript-5 ecma262

我已经看到几个问题解释为什么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。当我查看此规范时,我认为 "" 不是字符串数字文字,它应该被解析为 NaNNaN 不等于到 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/

相关文章:

javascript - 上传前预览图像?

javascript - 悬停在html元素上时, Electron 窗口调整大小切换

javascript - 如何在 Safari 中使 DOM 处理程序可枚举?

JavaScript 闭包 - 使用 ECMA 规范,请解释闭包是如何创建和维护的

javascript - 使用 javascript 或 CSS 隐藏特定的 H2 id

javascript - 将 image/jpeg 作为 arraybuffer 或 blob 返回

javascript - 使用 Html5 getters 和 setters 实现带有显示模块模式的属性需要澄清

javascript - Eclipse 中有没有办法更改 ECMAScript 合规级别?

javascript - 如何通过动态 ecma/javascript 表达式生成 vxml 标签

javascript - 与 ECMAScript 语言规范函数调用部分混淆