JavaScript对象的方括号键名

172

有人能解释一下如何/为什么在JavaScript中使用下面的键分配方法吗?

a = "b"
c = {[a]: "d"}

返回:

Object {b: "d"}
5个回答

259

иҝҷжҳҜж–°зҡ„ES2015пјҲд»ҘеүҚз§°дёәES6зҡ„EcmaScript规иҢғпјүи®Ўз®—еұһжҖ§еҗҚиҜӯжі•гҖӮе®ғжҳҜES3/5дёӯдҪ зҶҹжӮүзҡ„someObject[someKey]иөӢеҖјзҡ„з®ҖеҶҷеҪўејҸпјҡ

var a = "b"
var c = {[a]: "d"}

是语法糖的简写:

var a = "b"
var c = {}
c[a] = "d"

8
直到ES2022,[ ]可以作为数组字面量构造函数、属性访问器、计算属性名、解构赋值和绑定元素使用(参考链接:https://dev59.com/a1oU5IYBdhLWcg3wM1G9#37691566)。我怀疑这已经是全部了。 - Dogkiller87
3
没错...说实话,现在的JavaScript有点乱。太多人参与其中了。 - Jack_Hu

56

使用[]确实是在创建JavaScript对象时将变量的实际值用作/属性的一种绝佳方法。

我对上面的答案非常满意,很感激它让我能够举一个小例子。

我已经逐行在Node REPL(Node shell)上执行了这段代码。

> var key = "fullName";     // Assignment
undefined
>
> var obj = {key: "Rishikesh Agrawani"}    // Here key's value will not be used
undefined
> obj     // Inappropriate, which we don't want
{ key: 'Rishikesh Agrawani' }
>
> // Let's fix
undefined
> var obj2 = {[key]: "Rishikesh Agrawani"}
undefined
> obj2
{ fullName: 'Rishikesh Agrawani' }
>

27
const animalSounds = {cat: 'meow', dog: 'bark'};

const animal = 'lion';

const sound = 'roar';

{...animalSounds, [animal]: sound};

结果将会是

{cat: 'meow', dog: 'bark', lion: 'roar'};


6
此外,只有在评估或运行时我们不知道要访问或分配的对象内容时,才可以使用[]符号来访问或分配该对象的内容。

1

我希望创建一个对象,但是在运行时我不知道key的名称。

回到ES5时代:

var myObject = {};
myObject[key] = "bar";

写两行代码真的很痛苦...啊,ES6来了:

var myObject = {[key]:"bar"};

如果key的值等于foo,那么这两种方法的结果都是:

{foo : "bar"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接