JavaScript对象字面量中可以使用变量作为属性名吗?

67

4
以下是需要翻译的内容及链接:
  1. http://stackoverflow.com/questions/1567278/use-javascript-variable-in-object-name?rq=1
如何在JavaScript对象名称中使用变量?
  1. https://dev59.com/FU3Sa4cB1Zd3GeqPytuA?rq=1
有没有一种JavaScript表达式可以定义对象属性名称?
  1. https://dev59.com/-W445IYBdhLWcg3wytIU?rq=1
如何创建一个JavaScript对象,并将变量用作其属性名称?
  1. https://dev59.com/6mox5IYBdhLWcg3wNBjS
如何在JavaScript对象字面量中使用变量作为键?
  1. https://dev59.com/EFvUa4cB1Zd3GeqPxt9W?rq=1
在JavaScript中,什么是属性和对象?
- user166390
好的,SO在编写问题时很可能建议其中之一... - ThiefMaster
1
-1 我给了一个负评,因为有太多类似的问题。(在搜索时,“字面值”这个术语也可能很有用,因为它会揭示这不能以字面意义上实现。) - user166390
我在询问是否有可能直接将变量包含在对象写入中,就像我的示例一样,这是未在提到的线程中引用的事情。那么我会假设这是不可能的。 - jsgroove
这些其他问题都没有解决在对象字面量中使用变量值作为属性名的问题。 - Isaac Kleinman
3个回答

219

编辑

使用ES6,现在可以使用ComputedPropertyName来实现此功能,具体表现为以下语法形式:

var myVar = "name";
var myObject = {
    [myVar]: "value"
};

您可以使用[]语法,将表达式用作属性名称(与.propprop: value语法不同,它们始终被视为字符串):

var myObject = {};
var myVar = "name";
myObject[myVar] = "value";

不过,在对象字面量内部无法使用它,你必须先创建对象,然后单独为每个属性赋值。


30
+1 表示赞同文字。文字总是很好的。 - Blender
17
+1 是明确提到在对象字面量中无法完成此操作的原因,这也是我们聚集在这里的原因,不是吗? - rinogo
9
更新内容应该加上更多的要点,以便后来者了解现在已经可以实现了! - Flygenring

12

像这样吗?

var myVar = "name";
var myObject = {};

myObject[myVar] = "value";

10

可以,但不是直接的。

var myVar = "name";
var object = {};
object[myVar] = "value";

1
如果你想要一行代码:var object = Object.defineProperty( {}, myVar, { value: "value" } ); - Isaac Kleinman
@IsaacKleinman 那么它就不能被迭代、覆盖或删除。 - Scimonster
@Scimonster: 你可以这样写: var object = Object.defineProperty( {}, myVar, { value: "value", enumerable: true, writable: true, configurable: true } ); 仍然只有一行。;) - Isaac Kleinman
2
@IsaacKleinman 说得对,但那时候它几乎比这个解决方案还长。顺便说一下,在“enumerable”之前你漏了一个逗号。 - Scimonster
我已经寻找如何进行中间步骤数小时了。谢谢。 - usumoio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接