我在Opera 11.50上发现了表达式
JSON.stringify(2)
返回
的对象typeof
返回"string"
constructor.name
是String
charCodeAt(0)
是50 length
是1 但仍然
alert(JSON.stringify(2) == "2")
在Opera中显示“false”(使用===
也是如此)。
这是一个错误还是什么?
我发现让它比较等于“2”的唯一方法就是调用.substr(0)
(例如,即使添加一个空字符串仍然比较不同)。
答案 0 :(得分:7)
这绝对看起来像个错误。
来自ECMAScript 5.1规范:
符合JSON.parse和JSON.stringify的实现必须支持本规范中描述的确切交换格式,而不对格式进行任何删除或扩展。这与RFC 4627不同,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
根据@ 6502(见评论),这是true
:
铬; Firefox的; IE9; iPad Safari; OsX Safari; N1 Android浏览器
ECMAScript 5.1规范文档:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf