Javascript dictionary 的键不是以值的形式存储,而是以变量名的形式存储

我尝试创建一个这样的字典对象

var obj = { varName : varValue };

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

55531 次浏览

Try like this:

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

You can't initialize objects with 'dynamic' keys in old Javascript. var obj = { varName : varValue }; is equivalent to var obj = { "varName" : varValue };. This is how Javascript interprets.

However new ECMAScript supports computed property names, and you can do:

var obj = { [varName]: varValue };

Starting with ECMAScript 2015, which has gotten better browser support in the last year(s), you can use the variable index notation:

const obj = { [varName] : varValue };

This is syntactically the same as

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

You can also use expressions or Symbols as property key:

const contact = {
company: companyName,
};
const companiesWithContacts = {
[contact.company.toLowerCase()]: true
};
const myList = {
[Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }