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 关联数组 详解

JavaScript对象之关联数组的更多相关文章

  1. javaScript高级教程(三) javaScript不支持关联数组,只是语法上像关联数组

    1.在js中所有要素都是继承自Object对象的,任何对象都能通过obj['name'] = something的形式来添加属性,相当于obj.name=something. 之所以设计中括号这种存取 ...

  2. javascript中的关联数组

    所谓关联数组(associative array), 就是指javascript中的对象. 因为javascript中的属性就是一个个的键值对,可以通过obj[attr]的方式访问,很类似数组. 这种 ...

  3. javascript对象属性和数组的访问

    javascript对象属性的访问 假如有对象test:var test = {  "a":1,  "b":2};直接访问对象test的属性a的值,有两种方法: ...

  4. JavaScript高级 面向对象(11)--对象的动态特性-关联数组用法

    说明(2017.4.2): 1. 对象的动态特性: (1)在js中,一个对象需要属性,就可以利用“对象名.属性 = 值”的方式为其添加,只要赋值成功,对象就新增这个属性. (2)对象属性的访问形式: ...

  5. javascript对象深拷贝,浅拷贝 ,支持数组

    javascript对象深拷贝,浅拷贝 ,支持数组 经常看到讨论c#深拷贝,浅拷贝的博客,最近js写的比较多, 所以也来玩玩js的对象拷贝. 下面是维基百科对深浅拷贝的解释: 浅拷贝 One meth ...

  6. 好程序员web前端分享javascript关联数组用法总结

    好程序员web前端分享javascript关联数组用法总结,有需要的朋友可以参考下. Hash关联数组定义 代码如下 // 定义空数组 myhash = { } // 直接定义数组 myhash = ...

  7. JavaScript 对象与数组参考大全

    http://www.cnblogs.com/meil/archive/2006/06/28/437527.html本文列举了各种JavaScript对象与数组,同时包括对上述每一对象或数组所完成工作 ...

  8. JavaScript 浅析数组对象与类数组对象

    数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...

  9. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

随机推荐

  1. 201521123073 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 (1)集合里面获取对象的时候我们必须进行强制类型转换. List st ...

  2. 201521123095 《Java程序设计》第6周学习总结

    1.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面 ...

  3. 陈敏-第一周Java课程总结

    一.本周学习总结 1.感受到JAVA的神奇魅力,以及其跨平台的优势 2.第一次接触感觉还是有很多不懂. 3.了解了JDK 二.书面作业 (一)为什么java程序可以跨平台运行?执行java程序的步骤是 ...

  4. 201521123005 《Java程序设计》 第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  5. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】

    前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...

  6. Python学习笔记011_模块_标准库_第三方库的安装

    容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...

  7. 03_Ext_Viewport_Window_Dialog

    Viewport Viewport 代表整个浏览器窗口,直接渲染到document.body节点,取代页面中的所有内容.一般作为应用程序主界面. 随着浏览器显示区域的大小自动改变,一个页面中只能有一个 ...

  8. java的Date类和TimeStamp类

    Java API中有两个Date类,一个是java.util.Date,其构造方法如下: Date() Date(long date) 主要方法有: boolean after(Date when) ...

  9. js 第一课

    什么是JavaScript JavaScript是一种脚本语言,运行在网页上.无需安装编译器.只要在网页浏览器上就能运行 一般JavaScript与HTML合作使用. 例如 <html> ...

  10. python 部署 Restful web

    使用python web做Restful 风格,很简单,采用Flask框架轻松实现一个RESTful的服务. Restful相关介绍请查看:https://www.ibm.com/developerw ...