JS - 创建对象速记

时间:2014-12-16 22:20:25

标签: javascript syntax shorthand

采取以下对象:

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。

有没有办法做这个简写?

5 个答案:

答案 0 :(得分:6)

ECMAScript 6允许你做

var obj = {
    [key]: value
};

Browser support还不是很好,但6to5等转发器允许你今天使用这种表示法!

答案 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)

类似is coming in ECMAScript 6

  

使用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');