ES 提案:JSON 超集

由 Richard Gibson 提出的提案 “JSON superset” 是 ECMAScript 2019 的一部分。这篇博客文章讨论它是如何工作的。

目前,JSON(通过 ECMA-404 标准化)不是 ECMAScript 的子集:

  • 直到不久前,ECMAScript 字符串不能包含字符集 U+2028 行分隔符和 U+2029 段落分隔符(必须在字符串中转化它们)。于是,下面的源代码产生语法错误:
    const sourceCode = '"\u2028"';
    eval(sourceCode); // SyntaxError
    
  • JSON 字符串可以包含这两个字符:
    const json = '"\u2028"';
    JSON.parse(json); // OK
    

鉴于 JSON 的语法是固定的,决定移除 ECMAScript 字符串的限制。这简化了编程规范,因为你不需要区分 ECMAScript 字符串和 JSON 字符串的规则。