进一步理解javascript对象、数组和哈希表
2009-07-05 15:53
357 查看
在javascript中,对象实际上就是一个哈希表,比如下面这个user对象:
稍作改动,使用Array对象来代替对象:
更简单的写法:
由以上这些代码可以看出:
所有的javascript对象,包括Array对象在内实际上就是一个哈希表,属性名称就是哈希表的key,而属性的值就是哈希表的值。
Array对象与通常意义的数组对象并不相关,通常的数组仅能通过下标来定位,而javascript中的Array却可以像哈希表一个通过key来定位集合中的对象。
可以将一个function直接作为值赋给对象的“哈希表”。
前端时间看了阮一峰的 《数据类型与Json格式》 一文,提到在yaml描述数据时,将所有的数据分成三种类型:
第一种类型是scalar(标量),一个单独的string或数字,比如“北京”这个单独的词。
第二种类型是sequence(序列),若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
第三种类型是map(映射),一个键/值对(Key/value),又称作hash(散列)或dictionary(字典),比如“首都:北京”。
可能这三种类型我们都很熟悉,但文中提到的对json的四条规则却正好剖析了javascript描述数据的方式:
并列的数据之间用逗号(“,”)分隔。
映射用冒号(“:”)表示。
并列数据的集合(数组)用方括号('[]')表示。
映射的集合(对象)用大括号(“{}”)表示。
有了这四条规则(再加上对function的理解),对于很多看上去非常“诡异”的写法,都可以理解了。因此,一个javascript对象,实际上就是一个数组或是映射。
关于数组与映射的不同,可以看下面这个例子:
从定位到成员的方法来看,映射使用key来定位其中的成员,而数组使用下标,映射无法使用下标定位,同样数组也无法使用key(理所当然,根本就没有key);
从表示方法来看,映射可以使用类似对象属性的方式来访问(如:m.name),也可以使用带key的[]方式(如:m['name'],这是javascript一个特例,看上去像数组,实际上仍是映射);但数组仅能使用下标的方式;
从顺序来看:数组是有顺序的,映射是无序的;
function user(n, a) { this.name = n; this.age = a; this.toString = function() { return 'Name:' + this.name + ', Age:' + this.age; } } var u = new user('tom', 18); for (var k in u) { alert('key: ' + k + ', value:' + u[k]); }
稍作改动,使用Array对象来代替对象:
var user = new Array(); user['name']='tom'; user['age']=18; user['toString']=function(){ return 'Name:' + this.name + ', Age:' + this.age; } alert(user.toString());
更简单的写法:
var u = { 'name':'tom', 'age':18 } u.toString = function(){return 'Name:' + this.name + ', Age:' + this.age;}; alert(u.toString());
由以上这些代码可以看出:
所有的javascript对象,包括Array对象在内实际上就是一个哈希表,属性名称就是哈希表的key,而属性的值就是哈希表的值。
Array对象与通常意义的数组对象并不相关,通常的数组仅能通过下标来定位,而javascript中的Array却可以像哈希表一个通过key来定位集合中的对象。
可以将一个function直接作为值赋给对象的“哈希表”。
前端时间看了阮一峰的 《数据类型与Json格式》 一文,提到在yaml描述数据时,将所有的数据分成三种类型:
第一种类型是scalar(标量),一个单独的string或数字,比如“北京”这个单独的词。
第二种类型是sequence(序列),若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
第三种类型是map(映射),一个键/值对(Key/value),又称作hash(散列)或dictionary(字典),比如“首都:北京”。
可能这三种类型我们都很熟悉,但文中提到的对json的四条规则却正好剖析了javascript描述数据的方式:
并列的数据之间用逗号(“,”)分隔。
映射用冒号(“:”)表示。
并列数据的集合(数组)用方括号('[]')表示。
映射的集合(对象)用大括号(“{}”)表示。
有了这四条规则(再加上对function的理解),对于很多看上去非常“诡异”的写法,都可以理解了。因此,一个javascript对象,实际上就是一个数组或是映射。
关于数组与映射的不同,可以看下面这个例子:
var m = { name:'keel', age:5 } var a = [m,'sss',3]; //以下请求成功定位到name属性 alert(m['name']); alert(a[0]['name']);//a[0]定位到m alert(a[0].name); //以下失败 alert(m[0]);//映射无法以数组下标的方式访问
从定位到成员的方法来看,映射使用key来定位其中的成员,而数组使用下标,映射无法使用下标定位,同样数组也无法使用key(理所当然,根本就没有key);
从表示方法来看,映射可以使用类似对象属性的方式来访问(如:m.name),也可以使用带key的[]方式(如:m['name'],这是javascript一个特例,看上去像数组,实际上仍是映射);但数组仅能使用下标的方式;
从顺序来看:数组是有顺序的,映射是无序的;
相关文章推荐
- (转)进一步理解javascript对象、数组和哈希表
- 进一步理解javascript对象、数组和哈希表
- 进一步理解javascript对象、数组和哈希表
- 进一步理解javascript对象、数组和哈希表
- 进一步理解 javascript对象、数组、映射和哈希表
- 进一步认识Javascript中window对象的方法和属性以及重写alert方法,控制弹出窗口,frames[]数组
- JavaScript对象、数组和哈希表
- JavaScript对象的理解 及 字面量对象与数组的关系
- 深入理解javaScript中数组对象的concat方法
- 深入理解 JavaScript 对象和数组拷贝
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 【js与jquery】javascript中对象的理解
- 浅谈JavaScript对象数组根据某属性sort升降序排序
- 对 JavaScript 构造函数的进一步理解认识
- javaScript的对象和数组
- 【自学笔记】 原生JavaScript判断一个变量是否为数组,利用原型对象
- Javascript-数组与对象的区别
- JavaScript中原型对象的彻底理解
- 轻松学习JavaScript九:JavaScript对象和数组
- 【JavaScript】window对象_frames数组对象