这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 javascript 稀疏数组 (sparse array) 和密集数组用法, 分析 javascript 稀疏数组和密集数组的功能、定义与使用方法, 需要的朋友可以参考下
本文实例讲述了 javascript 稀疏数组 (sparse array) 和密集数组用法。分享给大家供大家参考,具体如下:
学习 underscore.js 数组相关 API 的时候,遇到了 sparse array 这个东西,以前没有接触过。
这里学习下什么是稀疏数组和密集数组。
什么是密集数组呢?在 Java 和 C 语言中,数组是一片连续的存储空间,有着固定的长度。加入数组其实位置是 address,长度为 n,那么占用的存储空间是 address[0],address[1],address[2].......address[n-1]。即数组元素之间是紧密相连的,不存在空隙。如下的 js 代码创建的就是一个密集数组
- var data = [3,1,6,9,2];
什么是稀疏数组呢?与密集数组相反,javascript 并不强制要求数组元素是紧密相连的,即允许间隙的存在。如下的 js 代码是合法的:
- var sparse = new Array();
- sparse[0] = 0;
- sparse[3] = 3;
- alert(sparse[0]);//输出0
- alert(sparse[1]);//输出undefined
1、创建稀疏数组
如下代码创建了一个固定长度的稀疏数组
- var a = new Array(3);
- a[2] = 1;
- alert(a[0]);//undefined
- alert(a[2]);//1
说白了 js 中建立稀疏数组很容易,只要你故意让数组元素之间存在间隙即可。如
- var arr = [];
- arr[0] = 0;
- arr[200] = 200;
2、创建密集数组
可以看到 js 中的数组一般都是稀疏的,一般来说稀疏数组的遍历比较麻烦。
- var dense = Array.apply(null, Array(3));
这行代码等同于 var dense = Array(undefined, undefined, undefined) ; 呵呵是不是觉得很奇怪,这种方式跟稀疏数组没有什么差别。看代码:
- //稀疏数组
- var array = new Array(3);
- array[2] = "name";
- for(var a in array)
- {
- console.log("index=" + a + ",value=" + array[a]);
- }
- // 密集数组
- var dense = Array.apply(null, Array(3));
- dense[2] = "name";
- for(var a in dense)
- {
- console.log("index=" + a + ",value=" + dense[a]);
- }
用 F12 观察控制台输出结果是:
可以看到确实是有差别的:稀疏数组只遍历了一次 (因为只有一个元素),密集数组遍历了 3 次。
3、总结
JavaScript 中的数组并不像我们在 C 或 java 等语言中遇到的常规数组,在 js 中数组并不是起始地址 + 长度构成的一片连续的地址空间。
javascript 中数组其实就是个对象, 只不过会自动管理一些 "数字" 属性和 length 属性罢了。
说的更直接一点, JavaScript 中的数组根本没有索引, 因为索引应该是数字, 而 JavaScript 中数组的索引其实是字符串。
arr[1] 其实就是 arr["1"], 给 arr["1000"] = 1,arr.length 也会自动变为 1001。
这些表现的根本原因就是:JavaScript 中的对象就是字符串到任意值的键值对。
虽然稀疏数组和密集数组差别不大,javascript 也没有语法强制数组是稀疏的还是密集的,这不过是概念上的区分。
最佳实践是:就把 js 数组当成是 java 或 C 中的数组,由我们程序员来负责让 js 的数组元素是连续的。
如
- var array = [1,2,3,4];
如:
- var array = new Array();
- array[0] = 0;
- array[1] = 1;
这样创建的 js 数组,就符合我们熟悉的数组了。
希望本文所述对大家 JavaScript 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0610/329072.html