JavaScript对象之关联数组
Tip: 内容摘抄自《JavaScript权威指南》,看过该书的同学可以忽略本文。
存取一个对象的属性的方式:
obj.attr;
obj["attr"];
两者最重要的区别就是前者的属性名是标示符,后者的属性名是一个字符串。
用"."运算符来存取一个对象的属性时,属性名是标示符,JavaScript程序中,标示符必须被逐字输入,它们不是一种数据类型,因此程序不能对他们进行操作。
用数组的概念"[]"来存取一个对象的属性时,属性名是用字符串表示的。字符串是JavaScript的一种数据类型,因此可以在程序运行的过程中操作并创建他们。
关联数组
obj["attr"];
如果使用一个对象是采用的是这种形式,我们常常称它为关联数组。关联数组是一种数据结构,允许你动态的将任意的数值和任意的字符串关联在一起。实际上,JavaScript对象的内部实现就是关联数组。
应用场景(obj["attr"])
当你需要编写一个程序,允许yonghu输入他所拥有的股票的名字和相应的份额来计算用户在股票市场投资的当前值,你可以这样做。
使用一个portfolio对象来保存这些信息,用户输入的每只股票的名字作为该对象的一个属性,其值为该支股票拥有的份额。例如:用户拥有Netscape公司的股票,份额为50,就有portfolio.nscp = 50;
这个程序需要一个循环,首先提示用户输入股票名,然后输入他拥有的份额。
由于用户在程序运行时输入股票名(portfolio对象的属性),所以你无法预先知道这些股票名是什么,所以在编程时不能使用"."运算符的方式,但可以使用"[]"关联数组的方式,因为他的属性名是一个字符串,程序运行时可以动态创建。
下面是具体的代码
(function(){
var portfolio = {};
var name,value,sum=0;//定义股票名/份额/投资当前值(总金额)
while(true){//输入股票名和份额并写入到portfolio对象中
if(!(name = prompt("请输入一支股票名","nscp") || false))break;
if(!(value= prompt("请输入您拥有的份额",50) || false))break;
portfolio[name] = +value;
}
for(e in portfolio){//遍历计算投资当前值(总金额)
sum +=portfolio[e]*1;//假设每支股票都是1元, 每支股票数量*股票价格
}
console.log(sum);//输出
})();
由于股票名是未知的,如果没有for/in循环,我们不能编写出这样的代码,输出属性名并计算结果。这是将属性名从portfolio对象中抽取出来的唯一方法
注意:
for(e in portfolio){
sum +=portfolio[e]*1;
}
中,e得到的只是portfolio的属性名,并不是属性名对应的属性值,所以 ”portfolio[e]“ 的写法是必要的
除此之外,你还可以看看这篇文章,内容差不多 [导入]js 关联数组 详解
最新文章
- 微信开发之Ngrok环境准备
- Q: ossfs挂载时如何设置权限?
- android xml 常用控件介绍
- PHP笔记(PHP高级篇)
- leetcode总结:permutations, permutations II, next permutation, permutation sequence
- SQL2008 R2 SP3中使用pivot实现行转列
- page80-栈用例-算术表达式求值
- HDU 3749 Financial Crisis 经济危机(点双连通分量)
- Java POI 导出EXCEL经典实现 Java导出Excel
- hdu 1536 SG函数模板题
- 使用ASP.NET MVC Web SignalR 构建单身聊天室(一)
- ERP服务启动后无法连接数据库的解决方法
- Mysql按周,按月,按日,按小时分组统计数据
- 类的初始化过程(难点)--------java基础总结
- SQL关闭自增长列标识:SET IDENTITY_INSERT
- IntelliJ IDEA 自动导入包 快捷方式 关闭重复代码提示
- iis 中https修改主机名方法
- Flask从入门到精通之使用Flask-Migrate实现数据库迁移
- django model中的save()方法
- MySql的数据目录
热门文章
- 201521123064 《Java程序设计》第7周学习总结
- Java程序设计第四周学习总结
- 201521123022 《Java程序设计》第三周学习总结
- 201521123101 《Java程序设计》第13周学习总结
- WPF(C#) 矩阵拖动、矩阵动画、边缘展开动画处理。
- 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法
- Python学习笔记011_模块_标准库_第三方库的安装
- python import xxx 与 from xxx import xx 模块引入的区别
- Django中的信号及其用法
- Mybatis——choose, when, otherwise可以达到switch case效果