2013-12-22 45 views
1

Javascript对象属性我从未想过我会在那样的问题绊倒,但嘿你知道什么..与变量名

var prop = 'horses' 

console.log({ 
    prop: 1 
}); 

我怎么能有这样产生的对象,而不是用的属性horsesprop,并可能在一行中完成?因为我可以想出一个解决方案,但是我真正想要的是一个单线。

+1

真正的单行:'var prop =“horses”; console.log((function(o,p){o [p] = 1; return o;})({},prop));' –

回答

3

您可以使用括号表示法:

var obj = {}; 
obj[prop] = 1; 
console.log(obj); 

在JavaScript中,你可以参考属性或者通过点符号和文字名称(foo.bar),或括号符号与字符串名(foo["bar"]) 。在后一种情况下,字符串可以是任何表达式的结果,包括(在您的情况下)变量引用。

...但我真正想要的是一个班轮。

作为对象初始值设定项的一部分,没有办法做到这一点,但是,您必须单独执行该操作。如果你想要一个班轮,你需要做一个函数调用,如:

console.log(makeObj(prop, 1)); 

其中makeObj

function makeObj(propName, propValue) { 
    var obj = {}; 
    obj[propName] = propValue; 
    return obj; 
} 
1

尝试使用JSON来创建对象:

console.log(JSON.parse("{\"" + prop + "\":\"1\"}"); 
+0

没有必要为此启动JSON解析器。不过创意。 –