采取以下对象:
var value = 'bar';
var obj = { foo: value }
// -> Object { foo="bar" }
假设密钥也是变量,可以去:
var key = 'foo', value = 'bar';
var obj = {}
obj[key] = value;
// -> Object { foo="bar" }
现在,我想在一行(速记)中这样做。所以我试过了:
var obj = {}[key] = value; // or,
var obj = ({})[key] = value; // or,
var obj = new Object()[key] = value;
// -> "bar"
这奇怪地产生了一个String而不是一个Object。
有没有办法做这个简写?
答案 0 :(得分:6)
答案 1 :(得分:5)
你可以,或几乎可以。如果将对象的创建及其赋值放在括号中的obj
,则可以设置该表达式结果的属性:
var obj, key='foo', value = 'bar';
(obj = {})[key] = value;
alert(obj); // [object Object]
alert(obj.foo); // bar

括号中的var
关键字不能包含在该表达式中,因此您必须先声明obj(就像我一样),或者根本不声明它并接受它将在全局范围内。
答案 2 :(得分:3)
取决于你所谓的单行,你可以做一些高尔夫代码
var obj = (function(o) {o[key]=value; return o})({});
它认为你得到它的时间最短?
答案 3 :(得分:1)
使用ECMAScript 6,可以实现更短的符号 同样的:
var a = "foo", b = 42, c = {}; // Shorthand property names (ES6) var o = { a, b, c };
因此,您可以使用以下代码
创建对象var foo = 'bar';
var obj = {foo};
答案 4 :(得分:0)
ECMAScript 5(当前版本)中没有简写,但您可以制作方法
function createObject(key, value /*, key, value, ... */ ) {
var object = {};
for (var i = 0; i < arguments.length; i = i + 2) {
object[arguments[i]] = arguments[i+1];
}
return object;
}
然后你就可以这样称呼它
var obj = createObject(key, value, 'anotherKey', 'anotherVal');