访问和创建对象属性的首选方法是什么?

时间:2011-12-02 19:56:13

标签: javascript

在Javascript中,您可以通过以下方式创建具有属性name的对象:

var person = { name: "Tucker" };

但也是这样:

var person = { "name": "Tucker" };

这两个相同吗?哪一个更受欢迎?

访问房产也是如此:

person["name"] = "Dale";

VS

person[name] = "Dale";

Eloquent JavaScript中,作者说The part between the brackets can be any expression. It is converted to a string to determine the property name it refers to.

所以,我想直接在括号之间放一个字符串将被视为最佳做法。

最后但并非最不重要的是,可以使用点表示法访问属性:

person.name = "Dale";

如果属性是有效的变量名称。将这种表示法用于看似更灵活的括号表示法是否真的有意义?

2 个答案:

答案 0 :(得分:2)

这些是相同的,唯一的区别是如果你的密钥是保留关键字,你需要引号:

var person = { name: "Tucker" };
var person = { "name": "Tucker" };
var person = { "for": "Tucker" }; //Need quotes here

访问时,适用相同的规则

person["name"] = "Dale"; //Sets the person object's name attribute to "Dale", the brackets are needed for variables or expressions.
person.name = "Dale";    //Same operation, different syntax
person[name] = "Dale";   //Sets the attribute equivalent to the value of the variable name, not necessarily "name"
  

在看似更灵活的括号表示法上使用这种表示法是否真的有意义?

完全取决于您,或者决定您项目编码标准的人。点符号更简单,让人联想到Java / C / C ++(如果你是那种东西)和括号,如你所说,更灵活。

答案 1 :(得分:2)

没有'最佳方式',这实际上取决于你正在做什么。

var person = { name: "Tucker" };

很好,但如果'name'实际上是'带空格的名字',那么你需要:

var person = { "name with a space": "Tucker" };

要访问属性,除非您在 for ... in 循环中,否则我会建议使用点符号:

person.name

当然你做不到:

person."name with a space"

所以:

person["name with a space"]