是否有一种方法在对象创建时通过字符串命名属性

Is there a way to name a property by string on object creation?

本文关键字:创建 字符串 属性 对象 方法 一种 是否      更新时间:2023-09-26

是否可以直接在对象声明本身内部命名对象属性,而不是在之后进行命名?

例如:

var name  = "foo";
var obj   = {};
obj[name] = "bar; // obj.foo === "bar"

但是有没有一种方法可以在对象本身内部实现,比如:

var name  = "foo";
var obj   = {
    name: "bar" // obj.name === "bar"
};

我知道可以使用字符串作为属性名,所以我认为这样的东西应该作为解决方案,但它没有:

var obj   = {
    "" + name: "bar"
};

有办法做到这一点吗?

在ES2015中有,否则在ES5中,没有办法这样做

var name = "foo";
var obj = {
  [name]: "bar"
};
console.log(obj)

从ECMAScript 2015开始,对象初始化语法也是支持计算属性名。它允许你放入一个表达式在括号[]中,它将被计算为属性名。这是对称于属性访问器语法的括号表示法,您可能已经使用它来读取和设置属性。现在你也可以在对象字面量中使用相同的语法。

MDN上对象初始化式的计算属性