【问题标题】:Key for javascript dictionary is not stored as value but as variable namejavascript字典的键不存储为值,而是作为变量名
【发布时间】:2012-05-17 17:00:56
【问题描述】:

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

var obj = { varName : varValue };

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

【问题讨论】:

标签: javascript


【解决方案1】:

试试这样:

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

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

然而新的 ECMAScript 支持computed property names,你可以这样做:

var obj = { [varName]: varValue };

【讨论】:

  • 这行得通!谢谢。虽然我仍然很好奇为什么其他方式不起作用。
  • 因为通常当您使用一组固定的键({} 语法正在做的事情)构造对象时,您知道这些键是什么。另一种方法是要求确实想要固定键的每个人都在它们周围加上引号,这对更多的人来说会更有效。
  • 您可能还会看到我刚刚回答的这个问题:stackoverflow.com/questions/10631007/…
  • 嘿,这很好用。感谢您的回答。
【解决方案2】:

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

const obj = { [varName] : varValue };

这在语法上与

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

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

const contact = {
    company: companyName,
};
const companiesWithContacts = {
    [contact.company.toLowerCase()]: true
};
const myList = {
    [Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2015-04-07
    • 2015-03-11
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多