js-数组

前言

  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之上定义的方法。

相关文章
相关标签/搜索