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/proposal-json-parseimmutable.md.
  • 简体中文
  • JSON.parseImmutable S2

    提案概览
    提案速览

    该提案解决了将 JSON 字符串解析为深度不可变对象的需求。它引入了一个 JSON.parseImmutable 函数,返回深度冻结的对象,类似于递归使用 Object.freeze

    Note

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

    JSON.parseImmutable 提案

    状态

    阶段 2

    提案发起人:

    • Nicolò Ribaudo(Igalia)
    • Ashley Claymore(Bloomberg)
    • Peter Klecha(Bloomberg)

    概述

    本提案指出 ECMAScript 需要一种函数,用于解析 JSON 字符串但返回深度不可变的对象。本提案的当前状态是向规范中添加一个 JSON.parseImmutable 函数,该函数接受一个字符串以及可选的 reviver 函数,并返回一个深度冻结的对象,即一个配置为仿佛在其上递归调用了 Object.freeze 的对象。

    const obj = JSON.parseImmutable('{ "one": { "two": 3 } }');
    assert(Object.isFrozen(obj));
    assert(Object.isFrozen(obj.one));

    目前要实现类似的结果,可以使用 reviver:

    JSON.parse(data, (key, value) => Object.freeze(value));

    但原生实现可能比基于 reviver 的实现快得多,而且静态分析将极大地受益于知道 JSON.parseImmutable 的结果始终是深度冻结的。

    历史

    本提案最初是 Records and Tuples 提案 的一部分,但为了减少核心 Records and Tuples 提案的范围而拆分为独立的提案。#330。在那个时候,提案中的 JSON.parseImmutable 函数将返回一个 Record 或 Tuple,它们是 Records and Tuples 提案提出的两种类型。Records and Tuples 提案被撤回,因此需要更改本提案的范围。