JS - 创建对象速记

dth*_*ree 4 javascript syntax shorthand

拿下面的对象:

var value = 'bar';
var obj = { foo: value }
// -> Object { foo="bar" }
Run Code Online (Sandbox Code Playgroud)

假设密钥也是一个变量,可以去:

var key = 'foo', value = 'bar';
var obj = {}
obj[key] = value;
// -> Object { foo="bar" }
Run Code Online (Sandbox Code Playgroud)

现在,我想在一行(速记)中这样做.所以我尝试过:

var obj = {}[key] = value; // or,
var obj = ({})[key] = value; // or,
var obj = new Object()[key] = value;
// -> "bar"
Run Code Online (Sandbox Code Playgroud)

这奇怪地产生一个String而不是一个Object.

有没有办法做这个简写?

Fel*_*ing 6

ECMAScript 6将允许您这样做

var obj = {
    [key]: value
};
Run Code Online (Sandbox Code Playgroud)

浏览器支持还不是很好,但是像6to5这样的转发器允许你今天使用这种表示法!


Gol*_*rol 5

你可以,或几乎可以.如果将对象的创建及其赋值obj放在括号中,则可以设置该表达式结果的属性:

var obj, key='foo', value = 'bar';
(obj = {})[key] = value;

alert(obj);  // [object Object]
alert(obj.foo);  // bar
Run Code Online (Sandbox Code Playgroud)

var关键字不能包含在括号内的表达,所以要么你将收到申报OBJ(像我一样),或者没有声明它在所有接受,这将是在全球范围内.