使用点符号作为键无法从数组的对象创建修改后的数组

Chr*_*raf 2 javascript arrays object

为什么我不能key像这样在新创建的对象中设置 a :

const baseObject = {key: "a", val: "b"}
const modifiedObject = {baseObject.val: baseObject.key} // SyntaxError: Unexpected token '.'
Run Code Online (Sandbox Code Playgroud)

但是使用括号是可以的:

const modifiedObject = {[baseObject.val]: baseObject.key} // OK
Run Code Online (Sandbox Code Playgroud)

根据我的理解,[baseObject.val]应该从里面创建一个baseObject.val只有那个项目的新数组。你能解释一下为什么会这样吗?这是key从对象的嵌套属性设置 a 的最佳实践方法吗?

我尝试在 MDN 和其他来源上查找信息,但找不到任何信息。我认为我的搜索短语是错误的,因为应该有一个非常基本的解释。如果您可以将我链接到已提供的答案,请随意标记为重复。

Cer*_*nce 6

您拥有[baseObject.val]的不是数组,而是“计算属性名称”,这是对象文字的特殊语法。

它的作用是,当在一个键应该在的对象文字中时,它计算括号内的表达式,然后在用该表达式构造的对象上定义一个属性。例如,{ ['foo']: 'bar' }结果为{ foo: 'bar' }{ ['a' + 'b']: 'bar' }结果在{ ab: 'bar' }.

你可以把你想要的任何表达式放在[]括号内,结果将是放在对象上的键。对于您的情况,您需要 的表达式值baseObject.val,因此语法为[baseObject.val]: