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)作为用于表示这是变量而不是文字字符串的虚构语法。
感谢。
答案 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();
当然你在这里仍然有数组符号,但也许你还是喜欢这种方法:)