除了显而易见的事实,第一种形式可使用变量而不单单是字符串文字,是否有理由在另外一种形式上使用一种?若是是这样,在哪一种状况下? app
在代码中: ide
// Given: var foo = {'bar': 'baz'}; // Then var x = foo['bar']; // vs. var x = foo.bar;
上下文:我已经编写了一个代码生成器来生成这些表达式,我想知道哪一种更好。 函数
点表示法不适用于Internet Explorer 8中的某些关键字(例如new
和class
)。 ui
我有如下代码: spa
//app.users is a hash app.users.new = { // some code }
这会触发可怕的“预期标识符”(至少在Windows XP的IE8上,我没有尝试过其余环境)。 简单的解决方法是切换到括号符号: code
app.users['new'] = { // some code }
方括号表示法可使用变量,所以在点表示法不起做用的两种状况下颇有用: 对象
1)动态肯定属性名称时(直到运行时才知道确切名称)。 ip
2)使用for..in循环遍历对象的全部属性时。 字符串
来源: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects get
使用这些符号时要当心:例如。 若是咱们要访问窗口父级中存在的函数。 在IE中:
window['parent']['func']
不等于
window.['parent.func']
咱们可使用:
window['parent']['func']
要么
window.parent.func
访问它
其中[]
符号有用的状况:
若是您的对象是动态对象,而且键中可能有一些随机值,例如number
和[]
或任何其余特殊字符,例如-
var a = { 1 : 3 };
如今,若是您尝试像a.1
这样访问,它将遇到一个错误,由于它在那儿指望一个字符串。
让我添加方括号表示法的更多用例。 若是要访问对象中的属性(例如x-proxy
,则-
将被错误地解释。 它们还有其余一些状况,例如空格,点等,在这种状况下,点操做将无济于事。 一样,若是u在变量中具备键,则访问括号中键值的惟一方法是使用方括号表示法。 但愿您能得到更多背景信息。