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

javascript字典的键不是作为值存储的,而是作为变量名存储的,javascript,Javascript,我正在尝试创建这样一个dictionary对象 var obj = { varName : varValue }; 我期望的是,如果varName='foo',obj应该是{'foo',some value'},但是我看到的是{varName',some value'}变量的值没有被使用,而是作为键的变量名。如何使可变值用作键?尝试如下: var obj = {}; obj[varName] = varValue; 在旧Javascript中,不能使用“动态”键初始化对象var obj={v

我正在尝试创建这样一个dictionary对象

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

尝试如下:

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

但是,新ECMAScript支持以下操作:

var obj = { [varName]: varValue };

从ECMAScript 2015开始,您可以使用可变索引表示法,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() { ... }