将 JSON 嵌入 ECMAScript,也就是 JSON ⊂ ECMAScript
通过 JSON ⊂ ECMAScript 提案,JSON 成为了 ECMAScript 的语法子集。如果你对此感到惊讶,你并不孤单!
ES2018 的旧行为
在 ES2018 中,ECMAScript 字符串字面量不能包含未转义的 U+2028 行分隔符和 U+2029 段分隔符字符,因为它们即使在该上下文中也被视为行终止符:
// 一个包含原始 U+2028 字符的字符串。
const LS = '
';
// → ES2018: 语法错误
// 一个包含原始 U+2029 字符的字符串,由 `eval` 生成:
const PS = eval('"\u2029"');
// → ES2018: 语法错误
这很麻烦,因为 JSON 字符串 可以 包含这些字符。因此,开发者不得不在将有效 JSON 嵌入到 ECMAScript 程序中时实现专门的后处理逻辑来处理这些字符。如果没有这样的逻辑,代码可能会出现细微的错误,甚至可能带来 安全问题!