JSON.stringify(2)==“2”可能返回false是否正确?

时间:2011-08-14 16:39:38

标签: javascript opera

我在Opera 11.50上发现了表达式

 JSON.stringify(2)

返回

的对象
  • typeof返回"string"
  • constructor.nameString
  • charCodeAt(0)是50
  • length是1

但仍然

alert(JSON.stringify(2) == "2")

在Opera中显示“false”(使用===也是如此)。

这是一个错误还是什么?

我发现让它比较等于“2”的唯一方法就是调用.substr(0)(例如,即使添加一个空字符串仍然比较不同)。

1 个答案:

答案 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