是否可以将速记属性名称(ES2015)与计算的属性名称(也包括ES2015)结合使用?例如...
const a = 'foo';
const o = {
[a],
}
> o
> {
"foo": "foo"
}
答案 0 :(得分:6)
否,这是不可能的。 grammar for ES2015 Object Initializers不允许将计算出的属性名称与速记一起使用。具体来说, ObjectLiteral
由 PropertyDefinitionList
组成。 PropertyDefinitionList
由 PropertyDefinition
组成:
12.2.6对象初始化程序
语法
ObjectLiteral : { } { PropertyDefinitionList } { PropertyDefinitionList, } PropertyDefinitionList : PropertyDefinition PropertyDefinitionList, PropertyDefinition PropertyDefinition : IdentifierReference CoverInitializedName PropertyName : AssignmentExpression MethodDefinition
在对象文字中支持计算属性的特定语法为 PropertyName : AssignmentExpression
,因为 PropertyName
被定义为:
PropertyName : LiteralPropertyName ComputedPropertyName
因此,该语法仅支持[computedProperty]: value
,因为只有 PropertyName : AssignmentExpression
是语法的一部分,而不是 PropertyName
本身。