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


Answers:


143

尝试这样:

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

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

但是,新的ECMAScript支持计算的属性名称,您可以执行以下操作:

var obj = { [varName]: varValue };

6
这可行!谢谢。尽管我仍然很好奇为什么其他方法不起作用。
dev.e.loper 2012年

3
因为通常当您使用一组固定的键(这就是{}语法在构造)构造对象时,您会知道这些键是什么。另一种选择是要求每个确实希望使用固定键的人都将引号引起来,这将使更多时间的更多人从事更多工作。
2012年

您可能还会看到这个问题,我刚才已经回答:stackoverflow.com/questions/10631007/...
HBP

34

从ECMAScript 2015开始,它在过去的几年中获得了更好的浏览器支持,您可以使用变量索引符号:

var obj = { [varName] : varValue };

在语法上与

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

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

var contact = {
    company: companyName,
};
var companiesWithContacts = {
    [contact.company.toLowerCase()]: true
};
var myList = {
    [Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.