JavaScript 属性访问: 用点?还是括号?

除了第一种形式可以使用一个变量而不仅仅是一个字符串这个显而易见的事实之外,是否有任何理由使用一个而不是另一个,如果有,在哪种情况下?
代码:

// Given:var foo = {'bar': 'baz'};
// Thenvar x = foo['bar'];
// vs. var x = foo.bar;

前提: 我已经编写了一个产生这些表达式的代码生成器,我不知道哪个更好。

中括号的属性名可以是数字,关键字或保留字,但是这种情况尽量避免吧,其他没什么必须用哪一种的

方括号表示法,允许使用不能用点表示法的字符:
var foo = myForm.foo[]; // incorrect syntaxvar foo = myForm["foo[]"]; // correct syntax
包括非non-ASCII (UTF-8)字符,如 myForm["ダ"]。
其次,方括号表示法在处理以可预测方式变化的属性名时非常有用:
for (var i = 0; i < 10; i++) {
someFunction(myForm["myControlNumber" + i]);}
看这里的解释:
• 点符号写起来更快,读起来更清晰
• 方括号表示法允许访问包含特殊字符的属性以及使用变量选择属性


不能用点符号表示的另一个字符示例是本身包含点的属性名。
例如,json response可以包含一个bar.Baz。
var foo = myResponse.bar.Baz; // incorrect syntaxvar foo = myResponse["bar.Baz"]; // correct syntax

中括号符号允许您通过存储在变量中的名称访问属性:

var obj = { "abc" : "hello" };var x = "abc";var y = obj[x];
console.log(y); //output - hello

但是obj.x 在这种情况下是行不通的。

点符号不适用于某些关键词(如 new 和 class)在 Internet Explorer 8。
代码:

//app.users is a hash
app.users.new = {
  // some code}

这就触发了烦人的的“预期识别器”(至少在 windows xp 的 IE8上是这样的)。解决这个问题的简单方法是切换到括号符号:

app.users['new'] = {
  // some code}

使用这些符号时要小心: 例如。如果我们想访问主窗口中的函数。 在 IE 中:
window['parent']['func']
不等同于
window.['parent.func']
可以用:
window['parent']['func']

window.parent.func
进入