属性访问表达式中的语法差异

时间:2012-03-02 16:49:01

标签: javascript

  

可能重复:
  JavaScript property access: dot notation vs. brackets?

让我们考虑一下我有一个对象:

var o = { x:1, y:2 };

访问这样的属性时有什么区别:

o.x

与此相比:

o["x"]

5 个答案:

答案 0 :(得分:4)

这些被称为Member Operators,在该链接中有很多关于它们的信息。

唯一真正的区别是括号表示法允许您违反变量命名规则并执行以下操作:

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

虽然以下显然是语法错误:

o.3213adascas        #@%! = 5;

此外,由于括号表示法采用字符串,因此您可以使用变量:

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

答案 1 :(得分:2)

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

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

除此之外,如果属性名称不是有效的标识符,则必须使用方括号表示法:

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

答案 2 :(得分:2)

没有区别 - 完全相同的东西......但确实启用了具有空格/模糊字符的键:

o['something here'] = "test";
例如,

会起作用,但这不会:

o.something here = "test";

答案 3 :(得分:2)

方括号表示法具有优势。您可以动态设置属性。

  

来自JavaScript Garden

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

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

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

这两种符号在其工作方式上是相同的,唯一的区别在于方括号   符号允许动态设置属性以及使用   属性名称否则会导致语法错误。

答案 4 :(得分:2)

这两个做同样的事情。但是,括号表示法(o["x"])允许您执行使用点表示法(o.x)无法执行的两项操作:

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

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