我正在使用es6解构功能,我做了以下
const state = { a: 1 };
const ID = 'b';
const newState = { ...state, [ID]: 2 }
如您所见,我使用常量的值作为标识符,生成此新对象。
//newStateValue ==> { a:1, b:2 }
我想知道[ID]是如何运作的?
由于
答案 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;)