92

我正在尝试像这样创建一个字典对象

var obj = { varName : varValue };

我期待的是,如果varName='foo',obj 应该是{'foo', 'some value' }但是我看到的是{varName, 'some value'}变量的值没有被使用,而是变量名作为键。如何使变量值用作键?

4

2 回答 2

171

试试这样:

var obj = {};
obj[varName] = varValue;

您不能在旧 Javascript 中使用“动态”键初始化对象。var obj = { varName : varValue };相当于var obj = { "varName" : varValue };。这就是 Javascript 的解释方式。

然而,新的 ECMAScript 支持计算属性名称,您可以这样做:

var obj = { [varName]: varValue };
于 2012-05-17T17:02:42.853 回答
44

从去年获得更好的浏览器支持的 ECMAScript 2015 开始,您可以使用变量索引表示法:

const obj = { [varName] : varValue };

这在语法上与

var obj = {};
obj[varName] = varValue;

您还可以使用表达式或符号作为属性键:

const contact = {
    company: companyName,
};
const companiesWithContacts = {
    [contact.company.toLowerCase()]: true
};
const myList = {
    [Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }
于 2016-08-24T13:28:15.117 回答