javascript学习笔记——对象与array(2)

联合数组作为对象(objects as associative arrays)

下列两个表达式具有相同的值。
object.property
object["property"]
 
不同之处在于:第一个表达式中的属性名是一个标识符;第二个表达式中属性名是一个字符串。这是很重要的。
当用.操作符取对象的属性时,属性名是一个标识符,标识符必须被typed literally into your js program,
不是一种类型,故不能被程序所操作。
而用[]时,属性名是字符串,字符串是js数据类型,故可以在程序运行期间被操作和创建。
var addr = " ";
for(i = 0; i < 4; i++) {
    addr += customer["address" + i] + '\n';
}
 
此代码读取并连接customer对象的address0, address1, address2 和 address3 属性。
以上例子可见使用数组符合取属性的弹性。
例 利用网络资源计算用户的股票市场投资的当前值,程序允许用户输入他所拥有的每个股票名称及份额。 
可以使用对象portfolio保存信息。这个对象对每个股票有一个属性,属性名即是股票名,属性值就是股票的份额。
所以,例如持有50股IBM股票, portfolio.ibm属性的值是50.
程序的一部分需要有循环以使用户输入一个股票的名字及拥有的份额,循环内部可以如此编码:
var stock_name = get_stock_name_from_user();
var shares = get_number_of_shares();
portfolio[stock_name] = shares;
 
在用户输入股票名之前无从得知对象的属性名,故当编写程序时不知道属性名也就无法使用.操作符取得portfolio对象的属性。
这时后通常调用一种associative arraya 数据结构,它允许动态联接具有任意字符串的任意值,
临时map经常用来描述这种情况:js对象将字符串(属性名)映射为值。
(.静态;[]动态)
将for/in循环与associative array 一起使用时其强大功能很清楚。 股票例子中,用户输入信息后可以使用
下列代码计算其现有总值:
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];
}
 
这是从associative array(js对象) portfolio中取得这些属性名的唯一方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值