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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 02:17:05  来源:igfitidea点击:

Key for javascript dictionary is not stored as value but as variable name

javascript

提问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() { ... }