JavaScript属性访问:点符号与方括号?

除了显而易见的事实,第一种形式可使用变量而不单单是字符串文字,是否有理由在另外一种形式上使用一种?若是是这样,在哪一种状况下? app

在代码中: ide

// Given:
var foo = {'bar': 'baz'};

// Then
var x = foo['bar'];

// vs. 
var x = foo.bar;

上下文:我已经编写了一个代码生成器来生成这些表达式,我想知道哪一种更好。 函数


#1楼

点表示法不适用于Internet Explorer 8中的某些关键字(例如newclass )。 ui

我有如下代码: spa

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

这会触发可怕的“预期标识符”(至少在Windows XP的IE8上,我没有尝试过其余环境)。 简单的解决方法是切换到括号符号: code

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

#2楼

方括号表示法可使用变量,所以在点表示法不起做用的两种状况下颇有用: 对象

1)动态肯定属性名称时(直到运行时才知道确切名称)。 ip

2)使用for..in循环遍历对象的全部属性时。 字符串

来源: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects get


#3楼

使用这些符号时要当心:例如。 若是咱们要访问窗口父级中存在的函数。 在IE中:

window['parent']['func']

不等于

window.['parent.func']

咱们可使用:

window['parent']['func']

要么

window.parent.func

访问它


#4楼

其中[]符号有用的状况:

若是您的对象是动态对象,而且键中可能有一些随机值,例如number[]或任何其余特殊字符,例如-

var a = { 1 : 3 };

如今,若是您尝试像a.1这样访问,它将遇到一个错误,由于它在那儿指望一个字符串。


#5楼

让我添加方括号表示法的更多用例。 若是要访问对象中的属性(例如x-proxy ,则-将被错误地解释。 它们还有其余一些状况,例如空格,点等,在这种状况下,点操做将无济于事。 一样,若是u在变量中具备键,则访问括号中键值的惟一方法是使用方括号表示法。 但愿您能得到更多背景信息。

相关文章
相关标签/搜索