`

进一步理解javascript对象、数组和哈希表[转载]

    博客分类:
  • js
阅读更多
在javascript中,对象实际上就是一个哈希表,比如下面这个user对象:
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一个特例,看上去像数组,实际上仍是映射);但数组仅能使用下标的方式;
从顺序来看:数组是有顺序的,映射是无序的;
分享到:
评论

相关推荐

    哈希表、动态数组总结

    ### 哈希表与动态数组综合应用 #### 哈希表概述 哈希表是一种数据结构,它能够高效地实现元素的插入、删除和查找操作。通过使用哈希函数将键映射到表中一个位置来访问记录,这加快了查找速度。哈希表在理想情况下...

    关于哈希表二维数组的应用

    梅花易数,关于二维数组,哈希表的应用,一位数组。

    java 算法:包括数组,哈希表,队列,栈,链表(双端,单向,双向)

    java 算法:包括数组,哈希表,队列,栈,链表(双端,单向,双向),二叉树(普通二叉树,哈夫曼树,二叉查找树,平衡二叉树,二叉线索树),图这些数据结构的实现以及多种排序算法和其他一些算法的实现(递归,二...

    链表啊,数组 啊,哈希表啊

    哈希表(使用键值标识元素,键值一样的元素即认为相等,需重载 == 运算符并由用户定义哈希函数) binstree.h: 二叉搜索树(需重载 == 和 运算符) avltree.h: AVL 树(需重载 == 和 运算符) <br>如果要...

    对象数组元素筛选算法

    通过对对象数组元素筛选算法的学习,我们可以更好地理解和处理复杂的数据结构。通过合理的算法设计和高效的编码实践,能够有效地解决实际开发中遇到的问题。在未来的工作中,我们还可以继续探索更先进的算法和技术,...

    哈希表(不错)C语言

    哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在C语言中,虽然没有内置的哈希表库,但我们可以自定义实现一个...

    深入分析:数组反转对哈希码的影响及代码实现

    本文提供的代码示例展示了如何在不同编程语言中实现数组反转和哈希码的计算,帮助开发者理解和应用这一概念。 通过本文的深入探讨和代码实践,读者应该能够理解数组反转对哈希码的影响,并能够在实际编程中应用这一...

    数组,链表和哈希表(Hashtable)1

    数组、链表和哈希表是计算机科学中最基础且重要的数据结构,它们各自有独特的优点和应用场景。在处理数据存储和检索时,选择合适的数据结构至关重要。 数组是一种线性数据结构,它在内存中占用连续的空间,每个元素...

    一维数组简易哈希

    简单的一维数组散列算法,输入的数字不用太多…………

    字符串中的第一个唯一字符(数组模拟哈希)1

    首先,我们要理解哈希表的概念。哈希表是一种数据结构,它通过关联键(在这里是字符)和值(在这里是字符出现的次数)来快速查找、添加和删除元素。在本问题中,由于字符集是有限的(小写字母),我们可以通过数组来...

    哈希表对象的源代码

    哈希表是一种高效的数据结构,它通过特定的算法(哈希函数)将键(key)映射到数组的索引位置,实现快速查找、插入和删除操作。在计算机科学和编程领域,理解哈希表的内部工作原理对于优化程序性能至关重要。本主题...

    哈希表设计 哈希表 哈希表

    哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速的查找、插入和...通过深入研究哈希表的设计,可以进一步提升我们的编程技能和算法理解。

    易语言源码易语言js哈希表源码.rar

    在JavaScript中,哈希表的实现通常是基于对象的,因为JavaScript的对象本质上就是键值对的集合,其内部通过哈希函数来定位键对应的值。但在易语言中,由于其语法和数据结构与JavaScript不同,实现哈希表需要自定义...

    哈希表相关操作实现

    通过学习哈希表,我们可以更好地理解数据结构和算法,提升软件开发的效率和质量。无论是编程语言的内置数据结构,如Python的dict或Java的HashMap,还是在数据库系统、缓存机制等应用场景中,哈希表都是不可或缺的一...

    c + + 哈希表实现数字排序

    总的来说,这个C++程序展示了如何使用哈希表进行数字排序,它巧妙地利用了数组索引来映射和统计输入整数,从而实现了一种基于计数的排序算法。这种方法对于大规模数据集和有限的输入范围非常有效。

    哈希表的设计与实现C语言

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在C语言中,实现哈希表需要理解其基本原理,并掌握如何利用...

    数组、字符串、向量与哈希表

    数组在Java中频繁使用,想到重要 包装类 理解String类和StringBuffer类 向量与哈希表

    哈希表源代码-哈希表模型

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组索引上,从而实现快速的查找、插入和删除操作。在这个"哈希表源代码"压缩包中,我们可以期待找到实现...

Global site tag (gtag.js) - Google Analytics