我在Opera 11.50上发现了表达式
JSON.stringify(2)
Run Code Online (Sandbox Code Playgroud)
返回一个对象
typeof 回报 "string"constructor.name 是 StringcharCodeAt(0) 是50length 是1但仍然
alert(JSON.stringify(2) == "2")
Run Code Online (Sandbox Code Playgroud)
在Opera中显示"false"(使用时也是如此===).
这是一个错误还是什么?
我发现让它比较等于"2"的唯一方法是调用.substr(0)(例如,即使添加一个空字符串仍然比较不同).
这绝对看起来像一个bug.
从ECMAScript 5.1规范:
符合JSON.parse和JSON.stringify的实现必须支持本规范中描述的确切交换格式,而不对格式进行任何删除或扩展.这与RFC 4627不同,后者允许JSON解析器接受非JSON表单和扩展.
和:
JSON.stringify生成符合以下JSON语法的String.JSON.parse接受符合JSON语法的String
这可能是因为它在某种程度上包装的字符串,其中还是有一个"JSONText"类型的对象typeof的string,但似乎很奇怪.
我肯定会认为在这种情况下的以下实现是正确的:
JSON.stringify(2) == "2" && JSON.stringify(2) === "2" && JSON.stringify(2) == 2 && JSON.stringify(2) !== 2;
true
Run Code Online (Sandbox Code Playgroud)
根据@ 6502(见评论),这是true在:
Chrome; Firefox的; IE9; iPad Safari; OsX Safari; N1 Android浏览器
ECMAScript 5.1规范文档:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |