javascript字典的键不作为值存储,而是作为变量名存储

dev*_*per 56 javascript

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

var obj = { varName : varValue };
Run Code Online (Sandbox Code Playgroud)

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

Eng*_*eer 115

试试这样:

var obj = {};
obj[varName] = varValue;
Run Code Online (Sandbox Code Playgroud)

您无法使用旧Javascript中的"动态"键初始化对象.var obj = { varName : varValue };相当于var obj = { "varName" : varValue };.这是Javascript解释的方式.

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

var obj = { [varName]: varValue };
Run Code Online (Sandbox Code Playgroud)

  • 这有效!谢谢.虽然我仍然好奇为什么其他方式不起作用. (6认同)
  • 因为通常当你用一组固定的键构造对象时(这就是`{}`语法正在做的事情)你知道那些键是什么.替代方案将要求每个_does_想要固定密钥的人在他们周围加上引号,这对更多人来说会更多. (3认同)

Leo*_*ler 24

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

var obj = { [varName] : varValue };
Run Code Online (Sandbox Code Playgroud)

这在语法上与...相同

var obj = {};
obj[varName] = varValue;
Run Code Online (Sandbox Code Playgroud)

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

var contact = {
    company: companyName,
};
var companiesWithContacts = {
    [contact.company.toLowerCase()]: true
};
Run Code Online (Sandbox Code Playgroud)
var myList = {
    [Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }
Run Code Online (Sandbox Code Playgroud)