JSON标准以一种方式定义对象,ECMAScript (JavaScript)标准在另一种方式中定义对象。
通常说JSON对象是JavaScript对象的子集,这是真的吗?
每个JSON对象是否也是一个有效的JavaScript对象?
答案 0 :(得分:30)
更新2019 :从this proposal开始,答案现在是 YES ,而ECMAScript 2019(包括)之后的JavaScript版本将是正确的超集。
答案是" no"。有些情况下,JSON对象不会对JavaScript有效。 JSON不是JavaScript子集。
<强> JSON 强>
即:由于JSON规范,您可以安全地在任何字符串中使用 U + 2028 等字符。它是 unicode whitespace 字符。不控制或其他特殊角色。
<强>的JavaScript 强>
好吧,现在用JavaScript。 ECMA-262的字符串定义略有不同。在section 7.8.4中有一个东西,该字符串可以包含除引号,反斜杠或行终止符之外的所有内容。现在是什么行终结者?它位于section 7.3:
如您所见,在JavaScript符号中 U + 2028 和 U + 2029 是不允许的。
这是一个示例,但由于我们有至少一个差异的情况,因此很好地意识到答案是否
图片来源&amp;完整说明:timelessrepo
答案 1 :(得分:2)
首先,在使用术语“JSON对象”时应采取一些预防措施:
如果需要,“JSON对象”可以引用JSON文本表示的对象。甚至JSON specification也定义了“对象”的含义:
对象是零个或多个名称/值的无序集合 对
这只是一个 intent ,因为JSON本身不是一种处理语言:它不会将文本解析为对象。
并非所有JSON文本都代表对象(例如,它们可以表示字符串或数字文字),所以说“JSON对象”确实有一些额外的值:它将是“表示对象的JSON文本”的缩写。
就像说“电子邮件通知”。电子邮件是一种通信机制,一个特定的电子邮件可以向您表示消息。它可能代表某事的通知,但不一定是。
虽然“JSON对象”可能是一个有效的术语,但它不应该用于JavaScript对象。 JSON可以在许多语言平台中使用,因此与JavaScript的历史联系应该放在一边。
JavaScript对象文字具有除JSON之外的其他语法规则,因此不应混淆它们。例如:
[1, , 2]
); U+2028
和U+2029
个字符。在EcmaScript2019之前,需要在JavaScript中转义这些字符。使用EcmaScript2019;