所有JSON对象都是有效的JavaScript对象吗?

Ben*_*aum 26 javascript encoding json character-encoding

JSON标准以一种方式定义的目的和ECMAScript的(JavaScript的)标准定义它在另一个.

通常说JSON对象是JavaScript对象的子集,这是真的吗?

每个JSON对象都是有效的JavaScript对象吗?

Alm*_* Do 32

更新2019:截至此提案,答案为YES,ECMAScript 2019(包括)之后的JavaScript版本将是正确的超集.


TL; DR

答案是不".有些情况下JSON对象对JavaScript无效.JSON不是JavaScript子集.

"小"差异

JSON

那就是:由于JSON规范,你可以安全地在任何字符串中使用这些字符,如U + 2028.它是一个unicode空白字符.不控制或其他特殊字符.

在此输入图像描述

JavaScript的

好吧,现在用JavaScript.ECMA-262的字符串定义略有不同.在7.8.4节中,有一个东西,该字符串可以包含除引号,反斜杠或行终止符之外的所有内容.现在什么是终结者?这是在7.3节:

  • \ u000A - 换行
  • \ u000D - 回车
  • \ u2028 - 行分隔符
  • \ u2029 - 段落分隔符

如您所见,在JavaScript中,不允许使用符号U + 2028U + 2029.

这是一个样本,但由于我们至少有一个区别的情况,所以很好地意识到答案是否定的

图像源和完整描述:timelessrepo

  • 更新:他们正在修理它!(https://github.com/tc39/proposal-json-superset) (3认同)
  • nitpick:图片信用实际上应该转到http://www.json.org/string.gif ;-) (2认同)