在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一个特例,看上去像数组,实际上仍是映射);但数组仅能使用下标的方式;
从顺序来看:数组是有顺序的,映射是无序的;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/greymouseyu/archive/2009/07/05/4323135.aspx
分享到:
相关推荐
### 方法二:利用对象(Object)作为哈希表 这种方法利用了JavaScript对象的特性,将数组元素作为对象的键,键的唯一性保证了去重的效果。具体步骤如下: 1. 创建一个空对象`o`,用于存储已经遇到的元素。 2. 初始...
下面将详细介绍几种常见的判断数组内元素是否重复的方法,并对每种方法进行深入解析。 #### 方法一:使用字符串连接与 `indexOf` 这种方法的基本思路是首先将数组转换成一个字符串,然后通过 `indexOf` 来判断字符...
JavaScript对象可以作为哈希表使用,用于存储键值对。通过字面量语法`{}`创建的对象从`Object.prototype`继承,初始时没有任何自定义属性。访问对象属性可以通过点操作符(如`foo.name`)或中括号操作符(如`foo['...
书中可能会介绍JavaScript中的数组、对象和哈希表等数据结构的使用技巧,以及如何根据场景选择合适的算法。 5. **内存管理**:JavaScript的自动垃圾回收机制可能导致内存泄漏,从而影响性能。作者会讲述如何识别和...
在这个主题中,我们将深入探讨JavaScript和Node.js中的基本数据结构,包括数组、对象、链表、队列、栈、哈希表、树以及图等。这些数据结构在解决实际问题时扮演着至关重要的角色,尤其在构建高效、可扩展的Web应用...
JavaScript中的基本数据结构有数组、对象、链表、栈、队列、哈希表、树(如二叉树、AVL树、红黑树)和图等。理解每种数据结构的特性及其适用场景至关重要,比如数组适合随机访问,链表适合插入和删除,哈希表提供...
例如,使用哈希表(JavaScript中的对象)进行查找通常比线性搜索更快;在需要频繁插入和删除的场景下,链表比数组更合适。 5. **实战应用** 数据结构和算法在实际项目中扮演重要角色,如前端路由管理(URL的解析和...
- **对象的创建与使用**: 在JavaScript中,对象可以被看作是哈希表,用于存储键值对。使用字面量语法`{}`创建的对象会从`Object.prototype`继承属性和方法,没有自定义属性。 - **属性访问**: 可以通过点操作符(`....
- **哈希表**:JavaScript对象可以作为简单的哈希表使用,这对于查找和映射问题非常有用。 5. **代码解析** 对于每一道题目的解答,理解其代码逻辑至关重要。从代码中,我们可以学习如何分析问题、设计算法、优化...
在JSON中,数据被组织为键值对的形式,类似于JavaScript的对象,或者说是其他语言中的字典或哈希表。主要的数据类型有字符串、数字、布尔值、数组、对象和null。例如: ```json { "name": "John", "age": 30, ...
3. 类和对象:在JavaScript中,可以通过原型链模拟面向对象编程,也可以使用ES6的class关键字创建类。理解对象和类的性质对于实现复杂的数据结构至关重要。 4. ES6+新特性:了解并掌握ES6及后续版本引入的新特性,...
例如,JavaScript的对象可以通过哈希表或关联数组来实现,而函数则可能以类的形式存在,通过调用成员函数来执行。 对于JavaScript的异步编程模型,dscript可能会实现事件循环和回调函数,或者采用Promise和async/...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在本示例中,`jmap.js`中的高性能`Map`利用了JSON的特性,将键值对存储为字符串化的JSON对象,然后...
这可能涉及创建结构体、链表、哈希表等,以保存解析出的键值对或数组元素。 6. **错误处理**:在解析过程中,可能会遇到语法错误,如缺少逗号、冒号、括号不匹配等。解析器需要能检测到这些错误,并给出适当的错误...
- 初始化数组有两种方式:正常数组和哈希表形式。 - 正常数组可以通过索引或值初始化。 - 哈希表形式数组通过键值对进行初始化。 9. **对象与类**: - 定义类:`class ClassName { public $property; public ...
3. **Enumerable**: 枚举类型的基类,适用于数组、哈希表和范围等,提供了统一的迭代方法。 4. **Array**: 扩展了数组原型,引入了`indexOf`、`without`等方法,提高了数组操作的灵活性。 5. **Hash**: 提供了一个...
本文将深入探讨如何使用JavaScript来实现一个简单的哈希表,并通过提供的代码示例进行详细分析。 #### 二、哈希表基本概念 哈希表是一种基于数组的数据结构,其主要特点是通过哈希函数将键值映射到数组的索引上,...
JavaScript中的对象可以当作哈希表,用于存储键值对。通过大括号{}可以创建一个新对象,例如`var foo = {}`创建了一个空对象,它继承自`Object.prototype`。要添加属性,可以像这样定义`var bar = {test: 12}`,`...
4. 哈希表:利用JavaScript的对象作为哈希表,可以快速查找和存储数据,尤其在解决“两数之和”、“无重复字符的最长子串”等问题时效果显著。 四、优化技巧 1. 时间复杂度和空间复杂度:理解并优化这两个指标是...