javascript 字典的键不存储为值,而是存储为变量名
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10640159/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Key for javascript dictionary is not stored as value but as variable name
提问by dev.e.loper
I'm trying to create a dictionary object like so
我正在尝试像这样创建一个字典对象
var obj = { varName : varValue };
What I'm expecting is if varName='foo'
, the obj should be {'foo', 'some value' }
however what I see is {varName, 'some value'}
the value of variable is not being used but a variable name as a key. How do I make it so that varible value is used as key?
我期望的是 if varName='foo'
,obj 应该是{'foo', 'some value' }
但是我看到的是{varName, 'some value'}
变量的值没有被使用,而是变量名作为键。如何使变量值用作键?
回答by Engineer
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.
您不能在旧的 Javascript 中使用“动态”键初始化对象。var obj = { varName : varValue };
相当于var obj = { "varName" : varValue };
。这就是 Javascript 的解释方式。
However new ECMAScript supports computed property names, and you can do:
然而,新的 ECMAScript 支持计算属性名称,你可以这样做:
var obj = { [varName]: varValue };
回答by Leon Adler
Starting with ECMAScript 2015, which has gotten better browser support in the last year(s), you can use the variable index notation:
从 ECMAScript 2015 开始,它在去年获得了更好的浏览器支持,您可以使用变量索引表示法:
var obj = { [varName] : varValue };
This is syntactically the same as
这在语法上与
var obj = {};
obj[varName] = varValue;
You can also use expressions or Symbols as property key:
您还可以使用表达式或符号作为属性键:
var contact = {
company: companyName,
};
var companiesWithContacts = {
[contact.company.toLowerCase()]: true
};
var myList = {
[Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }