第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
访问对象的属性可以用 "." 或 "[]" 语法。下面两个表达式效果是等效的:
object.property
object["property"]
这两种写法主要的区别是,前者的 property 是一个标志符(identifier),他们不是数据类型(data type). 而后者是字符串,是一种数据类型。所以后者可以在运行时刻来灵活的动态估算。比如:
var addr = "";
for (i = 0; i < 4; i++) {
addr += customer["address" + i] + '\n';
}
for (i = 0; i < 4; i++) {
addr += customer["address" + i] + '\n';
}
当一个 Object 以 [] 语法访问的时候,我们称之为“关联数组”(associate array)。JavaScript 对象在内部实际上就是以关联数组的方式来实现的。"." 的语法使得访问方式类似于 c 或 Java. 从这个角度来看,JavaScript 的对象其实更像 Perl 里的数组。
考虑到关联数组的时候, for/in 语法的功能才得以充分体现。下面是例子:
var value = 0;
for (stock in portfolio) {
// For each stock in the portfolio, get the per share value
// and multiply it by the number of shares.
value += get_share_value(stock) * portfolio[stock];
}
for (stock in portfolio) {
// For each stock in the portfolio, get the per share value
// and multiply it by the number of shares.
value += get_share_value(stock) * portfolio[stock];
}
如果属性是运行时产生的(比如用户输入的),也就是说程序在预先不可能预知,那么使用 for/in 语法是唯一可以获知属性名的方法。