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/year/pending/proposal-shorthand-improvements.md.
  • 简体中文
  • Object Shorthand Improvements S0

    中文标题:对象简写改进

    提案概览
    提案速览

    该提案旨在扩展对象初始化和解构赋值中的对象简写语法,以支持属性访问器。目前,简写赋值仅允许标识符,但该提案将允许 { o.x }({ a.x } = o) 这样的表达式。

    Note

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

    ECMAScript 简写属性赋值改进

    本提案为对象字面量初始化和对象赋值模式引入了新的简写赋值形式,允许在简写赋值中使用属性访问器,而不仅仅是标识符。

    状态

    阶段: 0
    提案发起人: Ron Buckton (@rbuckton)

    更多信息请参见 TC39 提案流程

    作者

    • Ron Buckton (@rbuckton)

    提案

    对象初始化器

    当在对象初始化器中使用属性访问器时,访问器的属性名称用作对象的属性名称,属性访问器的值用作对象中该属性的值。以下语法转换说明了这一点:

    const a = { o.x };

    其行为等同于:

    const a = { x: o.x };

    除了点号表示法外,也可以使用方括号表示法。与点号表示法类似,方括号表示法的表达式用作对象的属性名称。以下语法转换说明了这一点:

    const a = { o["x"] };

    其行为(大致)等同于:

    const a = { ["x"]: o["x"] };

    请注意,实际实现将依赖 GetReferencedName,而不是重复上述表达式 "x"

    解构赋值

    当在解构赋值中使用属性访问器时,访问器的属性名称用作赋值属性的属性名称,而属性访问器本身用作赋值目标。以下语法转换说明了这一点:

    ({ a.x } = o);

    其行为等同于:

    ({ x: a.x } = o);

    除了点号表示法外,这里也可以使用方括号表示法。使用方括号表示法时,方括号表示法的表达式被求值并用作赋值属性的属性名称,而属性访问器本身用作赋值目标。以下语法转换说明了这一点:

    ({ a["x"] } = o);

    其行为(大致)等同于:

    ({ ["x"]: a["x"] } = o);

    请注意,实际实现将依赖 GetReferencedName,而不是重复上述表达式 "x"

    语法

    PropertyDefinition[Yield, Await]:
        MemberExpression[?Yield, ?Await] `.` IdentifierName
        MemberExpression[?Yield, ?Await] `[` Expression `]`
        CallExpression[?Yield, ?Await] `.` IdentifierName
        CallExpression[?Yield, ?Await] `[` Expression `]`
        ...
    
    AssignmentProperty[Yield, Await]:
        MemberExpression[?Yield, ?Await] `.` IdentifierName Initializer[+In, ?Yield, ?Await]?
        MemberExpression[?Yield, ?Await] `[` Expression `]` Initializer[+In, ?Yield, ?Await]?
        CallExpression[?Yield, ?Await] `.` IdentifierName Initializer[+In, ?Yield, ?Await]?
        CallExpression[?Yield, ?Await] `[` Expression `]` Initializer[+In, ?Yield, ?Await]?

    资源

    待办事项

    以下是推进 TC39 提案流程各个阶段的高级任务列表:

    阶段 1 进入标准

    • 已确定一个将推进该提案的 "发起人"。
    • 已提供文字描述,概述问题或需求以及解决方案的大致形态。
    • 已提供说明性的示例
    • 高级 API (本提案不引入 API).

    阶段 2 进入标准

    阶段 3 进入标准

    阶段 4 进入标准

    • 已为主要使用场景编写 Test262 验收测试,并合并
    • 两个通过验收测试的兼容实现: [1][2]
    • 已向 tc39/ecma262 提交包含集成规范文本的拉取请求
    • ECMAScript 编辑器已就拉取请求签署同意。