es6使用常量解构对象

时间:2017-12-28 14:22:02

标签: javascript ecmascript-6

我正在使用es6解构功能,我做了以下

const state = { a: 1 };
const ID = 'b';
const newState = { ...state, [ID]: 2 }

如您所见,我使用常量的值作为标识符,生成此新对象。

//newStateValue ==> { a:1, b:2 }

我想知道[ID]是如何运作的?

由于

3 个答案:

答案 0 :(得分:1)

它被称为Computed Property Names,与deconstructing无关。

  

属性名称。这允许你将表达式放在方括号[]中,   将被计算并用作属性名称。这是   让人联想到属性访问器语法的括号表示法,   您可能已经习惯于阅读和设置属性。轮到你了   也可以在对象文字中使用类似的语法

答案 1 :(得分:0)

你可以在javascript对象中使用字符串作为这样的键

http://0.0.0.0:3000/api/customers/{customerId}/orders

现在关键点 name 来访问它的值,我们使用 obj.name ,如果你使用一个表示字符串的变量作为键,它将采用相同的方式被它的值取代,这就是下面的例子

   let obj = {
     ['name']: 'Your Name',
  };

答案 2 :(得分:0)

 const id = "b":
 const obj = { [id]: 1};

等于:

 const id = "b";
 const obj = {};
 obj[id] = 1;

与往常一样,语法可以在Ecma Spec中找到Expressions > Primary Expressions > Object Initializer部分内部:

对象的写法如下:

 {[id]:2}
  

ObjectLiteral:       {}       {PropertyDefinitionList}

属性定义列表只是一些逗号分隔的属性定义:

 [id]:2
  

PropertyDefinitionList:       PropertyDefinition       PropertyDefinitionList,PropertyDefinition

propertyDefinition可能是以下之一:

  

PropertyDefinition:       IdentifierReference       CoverInitializedName       属性名:AssignmentExpression       MethodDefinition

我们的是PropertyName:AssignmentExpression,所以

 [id]

PropertyName,是ComputedPropertyName。 所以下一次,只需在文档中查看ip;)