Javascript es6使用常量解构对象

Javascript es6使用常量解构对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我在玩es6解构功能,我做了以下几点 const state = { a: 1 }; const ID = 'b'; const newState = { ...state, [ID]: 2 } 如您所见,我使用常量的值作为标识符,生成这个新对象 //newStateValue ==> { a:1, b:2 } 我想知道[ID]是如何工作的 谢谢您可以像这样使用javascript对象中的字符串作为键 let obj = { ['name']: 'Your Name',

我在玩es6解构功能,我做了以下几点

const state = { a: 1 };
const ID = 'b';
const newState = { ...state, [ID]: 2 }
如您所见,我使用常量的值作为标识符,生成这个新对象

//newStateValue ==> { a:1, b:2 }
我想知道[ID]是如何工作的


谢谢

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

   let obj = {
     ['name']: 'Your Name',
  };
现在这里的键是name来访问它的值,我们使用obj.name同样的方法,如果使用一个表示字符串的变量作为键,它将被它的值替换,就是这样,请看下面的示例

让obj={
['name']:'Your name',
};
让myName='name';
让另一个对象j={
[我的名字]:“你的名字”,
};
console.log(obj.name);//你的名字
console.log(anotherObj.name);//您的名字
已被调用,但与您的名字无关

属性名称。这允许您将表达式放在括号[]中, 它将被计算并用作属性名称。这是 让人想起属性访问器语法的括号符号, 您可能已经使用它来读取和设置属性。现在你 也可以在对象文本中使用类似的语法

等于:

 const id = "b";
 const obj = {};
 obj[id] = 1;
与往常一样,可以在Ecma规范中的零件内部找到语法:

对象的编写方式如下:

 {[id]:2}
ObjectLiteral: {} {PropertyDefinitionList}

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

 [id]:2
PropertyDefinitionList: 属性定义 PropertyDefinition列表,PropertyDefinition

propertyDefinition可能是以下内容之一:

属性定义: 识别参考 CoverInitializedName PropertyName:AssignmentExpression 方法定义

我们的是一个
属性名称:AssignmentExpression
,所以

 [id]
是一个
属性名称
,它是一个
计算属性名称

所以下一次,只需在文档中查看它;)

你说的“它是如何工作的”是什么意思?这里的答案似乎是“因为语言说它可以”。是的,也许我的问题应该是在哪里可以找到语言的文档,它说你可以这样做它等于
newState[ID]=2
该代码的
[ID]
部分与解构无关。
 [id]