前言
js中的数组是js对象的特殊形式,它有一些特殊行为须要注意。全部的数组都是构造于Array(),都从Array.prototype之上继承一套数组操做方法。java
数组的定义
是值的有序列表。数组中的每一个值都叫作一个元素,每一个元素在数组中有一个位置,以数字来表示,称为索引。chrome
js数组特性
这里简单列出须要注意的特性,以后详细说明重要的部分。数组
不限类型:数组中的元素能够是任意类型的,同一个数组中也能够拥有不一样类型的元素。函数
动态:会根据须要增加或缩减,不须要在声明时指定数组元素中的个数。数组大小变化时不须要从新分配空间。(区别于真正意义上的数组,js中是使用对象实现的。)spa
是特殊的对象:第一门语言是java,刚学的时候常常搞出数组下标越界。js中的数本质是特殊对象,模拟的数组行为。访问不存在的下标时,只会单纯的返回undefined。prototype
稀疏数组:数组中的索引不连续,存在空下标。code
数组长度
每一个数组都有一个length属性,就是这个属性让它区别于其余的js对象。对象
索引:js中的数组本质是对象,全部的索引其实都是属性名,但只有2~32的平方-2之间的整数才叫作索引0,区别于普通属性。blog
length的两个特殊行为:继承
为数组增长元素时(使用索引添加,使用索引以外的属性不会触发),length会自动加一。
为length属性设置一个小于当前长度的非负整数n时,当前那些下标大于等于n的元素会从数组中删除。
var arr = []; console.log(arr.length); // 0 // 添加一个元素以后数组长度+1 arr[0] = 1; console.log(arr.length); // 1 // 将length赋值为0以后数组被清空 arr.length = 0; console.log(arr); // []
稀疏数组
数组之间的索引能够不是连续的,他们之间能够有空值。当一个数组中存在不连续的索引,它就变成了稀疏数组。
var arr = []; arr[0] = 1; arr[2] = 3; console.log(arr); console.log(arr[1]);
下图是稀疏数组chrome下的输出,它为咱们使用empty 标识了数组中空出的下表。访问空出的下表时,返回的是undefined。
避免产生稀疏数组
1,length属性不可靠,稀疏数组的length属性要少于其中元素的实际个数。
2,足够稀疏(存在大量不连续的下标)的数组在实现上比稠密数组更慢,内存利用率更高。查找元素的事件也跟常规对象查找属性时间同样长。
作为对象的数组
数组也是对象,也能够拥有本身的属性,咱们可使用这个特性作一些简单的时事情,复杂的逻辑仍是使用普通对象。
var arr = [1,2,3]; // 使用了非索引属性,此时length属性并不会增长。 arr.name = "number";
小结:
1,数组是值的有序列表。
2,js中的数组特性:数组元素不限类型、长度会自动增长或减小、是特殊的对象、不连续的索引下的复制会造成稀疏数组。
3,能够数组的length属性删除数组元素,但不要给他设置大于数组长度的值,会造成稀疏数组。
4,能够拥有索引以外的属性,但不要滥用,复杂的操做仍是交给普通对象,语义会更加明确。
5,全部的数组出自于内置的构造函数Array(),并共享Array.prototype之上定义的方法。