For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/set-map-prototype-tojson.md.
  • 简体中文
  • {Set,Map}.prototype.toJSON ?

    提案概览
    提案速览

    该提案针对 Map 和 Set 实例在 JSON.stringify 下返回 '{}' 这一无帮助结果的问题。它建议在 Set.prototype 和 Map.prototype 上添加默认的 toJSON 方法,使 JSON 序列化分别返回键值对数组或值数组。用户代码仍可在具体实例上覆盖这些方法。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    Map-Set.prototype.toJSON

    一个 ECMAScript 提案。目前处于第 0 阶段

    该提案在 2016 年 3 月的委员会会议上提出,并被彻底否决。详情

    问题

    以下是当前的情况:

    var s = new Set(['yo', 'ya', true, 8]);
    
    console.log(JSON.stringify(s)); // '{}'

    这个结果没有用处。Map 也是如此。

    提案

    本提案旨在通过 Set.prototypeMap.prototype 上的默认 toJSON 实现,为 JSON 序列化这一常见操作提供一个合理的默认行为。当然,用户代码总是可以在特定实例上覆盖该值。

    Map.prototype.toJSON

    本提案的核心内容体现在以下代码片段中(规范见 markdownHTML):

    Map.prototype.toJSON = function toJSON() {
      return [...Map.prototype.entries.call(this)];
    }

    Set.prototype.toJSON

    本提案的核心内容体现在以下代码片段中(规范见 markdownHTML):

    Set.prototype.toJSON = function toJSON() {
      return [...Set.prototype.values.call(this)];
    }

    讨论

    如果使用原生 Map 和 Set 或 polyfill 的代码依赖于当前的 JSON.stringify 行为,可能会存在 web 兼容性问题。

    许可证

    本作品致力于公有领域。采用 CC0 许可