第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
访问对象的属性可以用 "." 或 "[]" 语法。下面两个表达式效果是等效的:
object.property
object["property"]
这两种写法主要的区别是,前者的 property 是一个标志符(identifier),他们不是数据类型(data type). 而后者是字符串,是一种数据类型。所以后者可以在运行时刻来灵活的动态估算。比如:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
当一个 Object 以 [] 语法访问的时候,我们称之为“关联数组”(associate array)。JavaScript 对象在内部实际上就是以关联数组的方式来实现的。"." 的语法使得访问方式类似于 c 或 Java. 从这个角度来看,JavaScript 的对象其实更像 Perl 里的数组。
考虑到关联数组的时候, for/in 语法的功能才得以充分体现。下面是例子:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
如果属性是运行时产生的(比如用户输入的),也就是说程序在预先不可能预知,那么使用 for/in 语法是唯一可以获知属性名的方法。