访问对象的属性可以用  "." 或 "[]" 语法。下面两个表达式效果是等效的:

object.property
object["property"]


这两种写法主要的区别是,前者的 property 是一个标志符(identifier),他们不是数据类型(data type). 而后者是字符串,是一种数据类型。所以后者可以在运行时刻来灵活的动态估算。比如:

第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)var addr = "";
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
for (i = 0; i < 4; i++) {
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)    addr 
+= customer["address" + i] + '\n';
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)}

当一个 Object 以 [] 语法访问的时候,我们称之为“关联数组”(associate array)。JavaScript 对象在内部实际上就是以关联数组的方式来实现的。"." 的语法使得访问方式类似于 c 或 Java. 从这个角度来看,JavaScript 的对象其实更像 Perl 里的数组。

考虑到关联数组的时候, for/in 语法的功能才得以充分体现。下面是例子:

第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)var value = 0;
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
for (stock in portfolio) {  
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)    
// For each stock in the portfolio, get the per share value  
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
    // and multiply it by the number of shares.
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)
    value += get_share_value(stock) * portfolio[stock];
第八章 8.6 用作关联数组的对象(Objects as Associative Arrays)

如果属性是运行时产生的(比如用户输入的),也就是说程序在预先不可能预知,那么使用 for/in 语法是唯一可以获知属性名的方法。

相关文章:

  • 2021-11-21
  • 2021-12-05
  • 2022-01-09
  • 2021-12-10
  • 2021-06-12
  • 2021-09-06
  • 2021-12-18
  • 2021-09-25
猜你喜欢
  • 2021-12-22
  • 2022-12-23
  • 2021-07-13
  • 2021-08-19
  • 2022-01-21
  • 2021-11-25
相关资源
相似解决方案