JavaScript对象声明语法 - 变量名称作为属性

时间:2012-09-26 18:09:55

标签: javascript object syntax

JavaScript为您提供了许多声明对象的方法。当您掌握了大部分数据时,最方便的(在我看来)如下:

var person = {
    name: 'John',
    age: 23
}; // "object literal syntax"

这种语法的奇怪之处在于它与此相同:

var person = {
    'name': 'John',
    'age': 23
}; // "object literal syntax"

也就是说,您可以使用引号或省略它们作为属性名称。

将其与设置单个属性的方式进行比较时,您有两个选择:

person.birthday = "January 12"; // "dot syntax"

person['birthday'] = "January 12"; // "array syntax"

“点语法”仅在右操作数是实际属性名称时有效。如果要对属性名称使用变量,则必须使用“数组语法”,即:

var prop = "birthday";
person[prop] = "January 12";

现在,是否可以在“对象文字语法”中使用变量作为属性名称?因为引用属性名称并不重要,所以似乎没有一种明显的方法可以在那里使用变量。我正在寻找这样的东西:

var prop = "birthday";
var person = {
    name: 'John',
    age: 23,
    (prop): 'January 12'
};

这里我使用(prop)作为用于表示这是变量而不是文字字符串的虚构语法。

感谢。

4 个答案:

答案 0 :(得分:7)

不,这不起作用,这就是为什么,如果你动态设置属性名称,建议并使用像表示法一样的数组。

var k='propertyname';
object[k]="value";

这是有效的,同时使用点表示法从vatiable设置索引或属性名称是不可能的。

答案 1 :(得分:4)

对于需要替换点语法的人来说,其中键是对象而不是字符串(比如在父对象中嵌套),这里有一些解决方法:

var developers = {
    person: {
        'name': 'John',
        'age': 23
    },
    anarchist: (function(){ var a = {};
        a['name'] = 'John';
        a['age'] = 23;
        a[false] = false;
        a[1] = 1;
        a[window] = window;
    return a; })(),
    conformist: _.object([
        ['name', 'John'],
        ['age', 23],
        [false, false],
        [1, 1],
        [window, window]
    ])
};

// console.log(developers); // <- to see var dump in Firebug

无政府主义者元素使用在调用后收集垃圾的self-executing-function,如果您可以在网站中包含underscore.js,则遵循元素使用_.object()函数。

我希望内置的Object()和Array()函数允许传递键和值,方法是underscore.js: - )

答案 2 :(得分:4)

ES6现在允许这样做:

var obj = {
  [prop]: 'value'
};

答案 3 :(得分:2)

你不能用对象做这个,但如果你考虑使用构造函数,它可能看起来像这样:

var prop = "birthday";
var Person = function() {
    this.name = "Bob";
    this[prop] = "January 12";
};
var bob = new Person();

当然你在这里仍然有数组符号,但也许你还是喜欢这种方法:)