速记属性名称和计算的属性名称可以同时使用吗?

时间:2018-07-12 22:00:04

标签: javascript ecmascript-6

是否可以将速记属性名称(ES2015)与计算的属性名称(也包括ES2015)结合使用?例如...

const a = 'foo';
const o = {
    [a],
}
> o
> {
    "foo": "foo"
  }

1 个答案:

答案 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 本身。