具有变量名称的Javascript对象属性

时间:2013-12-22 22:12:21

标签: javascript

我从没想过我会遇到这样的问题,但是嘿你知道什么......

var prop = 'horses'

console.log({
    prop: 1
});

如何让它生成一个具有属性horses而不是prop的对象,并且可能只在一行中完成?因为我可以想到一个解决方案,但我真正想要的是一个单行。

2 个答案:

答案 0 :(得分: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 :(得分:1)

尝试使用JSON创建对象:

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