本文主要是给大家简单介绍了 Array 的相关基础知识,到这里也算是能对 Array 有更全面的理解了,希望大家能够喜欢,后续我们将继续介绍关于 array 的内容。
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
Javascript,一门神奇的语言,它的数组也同样独特。我们要去其糟粕,取其精华,把常用的最优实践总结出来。如有错误,请指出。
javascript 数组是一种类数组的对象,拥有对象的特性。当属性名是小而连续的整数时,应该使用数组,否则,使用对象。
数组来源
所有的数组都是 Array 构造出来的,我们来测试一下 constructor 这个属性。
- var arr = [];
- arr.constructor === Array; // true
- arr.constructor === Array.prototype.constructor; // true
创建数组
- //数组字面量方式
- var arr1 = [1, 2, 3]; // [1,2,3]
- //构造函数方式
- var arr2 = new Array(); // [] 空数组
- var arr3 = new Array('9'); // ["9"] 一个字符串元素
- var arr4 = new Array(9); // [] 数组长度length为9
- var arr5 = new Array([9]); // [[9]] 相当于二维数组
- var arr6 = new Array(1, 2, 3); // [1, 2, 3]
- var arr7 = new Array(1,
- function f() {},
- {
- o: 6
- },
- null, undefined, true);
- // 数组可以存储任意混合数据类型
由于 arr4 的方式,当只有一个数字参数传递到 Array 的构造函数中,构造函数会返回设置了 length 属性的空数组。所以推荐使用数组字面量方式,短小而简洁。
检测对象是否为数组
- var arr1 = [1, 2, 3];
- typeof(arr1); // object
众所周知,typeof 不能正确检测类型。
- arr1 instanceof Array; //true
instanceof 方式在一个网页内是没有问题,一旦嵌套其他网页,便存在两个全局作用域,互相调用时的检测就会出问题。
- Array.isArray(arr1); // true
Array.isArray() 是 ECMAScript5 新增的方法,没有缺陷。唯一的问题是 ie8 浏览器不支持,ie9 浏览器在严格模式下也不支持。
- Object.prototype.toString.apply(arr1).slice(8, -1); // Array
最后一种方式是检测类型的最好方法。
数组长度
数组的 length 也是它的属性,增大 length 也不会发生越界错误。
length 值等于数组最大的整数属性名加 1。
- var arr1 = [];
- arr1[9] = 1; // 长度为10,只包含一个元素的数组
设小值将将会把属性名大于等于 length 的属性删除。
如果将 length 值设为 0,相当于清空数组。
- var arr2 = [1, 2, 3, 4, 5];
- arr2.length = 3; // [1, 2, 3]
- arr2.length = 0; // []
数组遍历
遍历数组不要使用 for in 循环遍历数组,因为 for in 会遍历原型链上的所有属性,但我们并不需要这么多。推荐使用 for 循环的方式。
- var arr1 = [1, 2, 3];
- arr1.test = 9;
- //for in 方式
- for (var prop in arr1) {
- cosole.log(prop, arr1[prop]);
- }
- // 输出如下
- // 0 1
- // 1 2
- // 2 3
- // test 9
- //for循环方式
- for (var i = 0,
- len = arr1.length; i < len; i++) {
- console.log(arr1[i]);
- }
- //输出如下
- // 1
- // 2
- // 3
我们看到 for in 方式多出了一个 test 值,可以使用 hasOwnProperty 函数排除,但那会比 for 循环的方式慢很多。
缓存数组长度很有必要的一步,每次访问是有性能开销的(最新的浏览器在这方面做了优化)。
小结
简单介绍了 Array 的相关基础知识,到这里也算是能对 Array 有更全面的理解了。下一篇介绍 Array 的方法。
Javascript 虽然有很多不太容易弄懂的地方,随着长时间的学习,我已经慢慢地爱上它了(因为现在没有妹子让我爱)。
来源: http://www.phperz.com/article/17/0301/266707.html