JavaScript 的 (0 == “”) === true 如何与 ECMA-262 类型转换规则一致
How JavaScript's (0 == "") === true agrees with ECMA-262 type conversion rules?
我已经看到了几个问题,解释了为什么0 == ""
在JavaScript中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
呢?
提前谢谢。
语法允许 StringNumericLiteral 为空:
字符串数字文字 :::
StrWhiteSpaceopt
StrWhiteSpace opt StrNumericLiteralStrWhiteSpaceopt
往下几行,上面写着:
空的或仅包含空格的字符串数字文本将转换为 +0。
和:
StringNumericLiteral 的 MV ::: [empty] 为 0。
所以恐怕你根本就没有完全读懂你正在看的标准段落。 :)
相关文章:
- ECMAScript(ECMA-262 5.1)中“引用”的“基值”是什么
- 布尔类型转换系统(Java)
- 为什么从字符串到整数的类型转换总是返回“”;0〃;
- 弱类型语言类型转换的意思在哪里,为什么使用.例如JavaScript
- jQuery data() 类型转换问题
- JavaScript 中的显式类型转换和类型
- Javascript类型转换悖论
- 将嵌套的 c# 类型转换为 json,并在 javascript 中使用它
- JSDoc 类型转换为“窗口”
- Dojo Dnd 问题:使用 JavaScript 通过 Dnd 项类型转换为 JSON
- jQuery:在 $.each 中从字符串类型转换为字符串对象
- 奇怪的JavaScript类型转换
- JavaScript 的 (0 == “”) === true 如何与 ECMA-262 类型转换规则一致
- JavaScript 括号将基元类型转换为对象
- JavaScipt的数据类型转换对于“==”运算符究竟是如何工作的
- 在数组中添加和减去数字索引值的类型转换
- Javascript/google闭包库中的类型转换
- 类型转换问题,如何使用好的旧===而不是===
- 是否可以像在Javascript对象中那样将整数值存储在localStorage中,并在不进行类型转换的情况下提取它
- javascript中带有无符号32位整数的位移位/类型转换