•
阅读 2 分钟
ES 提案:格式正确的 JSON.stringify
由 Richard Gibson 提出的提案 “格式正确的 JSON.stringify” 是 ECMAScript 2019 的一部分。这篇博客文章解释它如何工作。
根据 JSON 的 RFC,如果你想使用 JSON,必须将参数编码为 UTF-8,那样的话使用 JSON.stringify()
有一个问题,因为它可能返回不能编码为 UTF-8 的 UTF-16 代码单元的结果。
怎么会发生这种事?如果是一个包含单独代理(lone surrogate)(范围在 0xD800–0xDFFF
内的 JavaScript 字符集)的 JavaScript 字符串,那么 JSON.stringify()
产生一个单独代理字符串:
console.log(JSON.stringify('\u{D800}') === '"\u{D800}"')
// -> false
单独的 UTF-16 代理字符不能编码为 UTF-8,这是为什么这个提案改变 JSON.stringify()
,以便通过代码单元转义序列表示它们:
console.log(JSON.stringify('\u{D800}') === '"\\ud800"')
// -> true
注意:JSON 提供代码单元转义序列(例如 \uD800
),但是不编码指向转义序列(例如 \u{D800}
)。
本文由 吳文俊 翻译,原文地址 ES2019: Well-formed JSON.stringify
标签: javascript json es2019