2012-03-02 85 views

回答

4

那些被称为Member Operators,并没有在该链路上他们信息的好一点。

唯一真正的区别是,括号符号让你不服从变量的命名规则,做这样的事情:

o["3213adascas  #@%!"] = 5; 

尽管下面显然是一个语法错误:

o.3213adascas  #@%! = 5; 

此外,由于括号表示法需要一个字符串,您可以使用它的变量:

var o = { x:1, y:2 }; 
var member = 'y'; 
console.log(o[member]); // Outputs 2 
2

o.x实际上只是o["x"]的语法糖。他们做同样的事情。但是,方括号表示法允许您例如使用可变作为属性名的值来访问:

var someString = "x"; 
o[someString]; 

除了这一点,如果属性名称是不是一个有效标识符,方括号必须使用:

var myObj = { 
    "space property": 1 
}; 
myObj["space property"]; 
2

没有区别 - 同样的事情......但并实现与空间/晦涩字符键:

o['something here'] = "test"; 

将例如工作,但是这不会:

o.something here = "test"; 
2

的方括号有一个优点。您可以动态设置属性。

From JavaScript Garden

var foo = {name: 'Kitten'} 
foo.name; // kitten 
foo['name']; // kitten 

var get = 'name'; 
foo[get]; // kitten 

foo.1234; // SyntaxError 
foo['1234']; // works 

Both notations are identical in their workings, with the only difference being that the square bracket notation allows for dynamic setting of properties, as well as the use of property names that would otherwise lead to a syntax error.

2

这两个完全一样的东西。然而,括号表示法(o["x"]),可以做两件事情,你不能用点号(o.x)做:

  1. 访问属性与任意字符串。例如,o["function"]o["432 %^$ ==="]是有效的语法,但o.function无效,因为function是关键字,并且o.432 %^$ ===无效,因为它构成语法错误。

  2. 设置对象的动态属性。您可以使用括号表示法做var str = "prop";并访问o[str]