如何使用模板文字作为对象文字中的键?

How to use template literal as key inside object literal?

如何使用模板文字作为对象文字中的键?

以下代码:

{
    `${id}_name`: "John Doe",
    `${id}_age`: 27,
}

产生语法错误:

Uncaught SyntaxError: Unexpected token :

我是否遗漏了什么,或者这不受支持?如果没有,是否计划支持此功能?

当然我马上想出了一个解决方案:

{
    [`${id}_name`]: "John Doe",
    [`${id}_age`]: 27,
}

将模板文字括在方括号中。这将计算方括号之间的表达式并将其用作键。

没有方括号,只能使用标识符(例如my_key_name)、单引号或双引号字符串(例如"My Key Name")和数字(例如42)。

您的回答是正确的,但我会尝试回答其中的原因。

如果我们引用Ecmascript object definition,则表示

Properties are identified using key values. A property key value is either an ECMAScript String value or a Symbol value. All String and Symbol values, including the empty String, are valid as property keys. A property name is a property key that is a String value.

在这种情况下,ECMAScript string 定义为

A string literal is zero or more Unicode code points enclosed in single or double quotes. Unicode code points may also be represented by an escape sequence. All code points may appear literally in a string literal except for the closing quote code points, U+005C (REVERSE SOLIDUS), U+000D (CARRIAGE RETURN), and U+000A (LINE FEED).

这意味着字符串必须是用单引号或双引号括起来的 unicode 字符。对象键必须是 ECMAScript 字符串或符号,我假设它们是索引。

模板文字是 ECMAScript 字符串,但 ECMAScript 字符串不是模板文字。

P.S。请对此持保留态度,我不是 ECMAScript 专家,但这就是我能找到的。