【JS复习笔记】04 数组

JS里的数组其实并不是一个数组,它其实是一个对象,a[1]这种调用方式其实就是一个字面量为1的属性。

因为这东西实际上是一个对象,所以你就可以理解下面这种声明了吧!

var arrName=['我可以是一个字符串',1,true,null,undefined,[1,'23'],{name:'123'},NaN,Infinity];

关于数组长度

  • 数组长度:arrName.length。
  • 数组长度没有上界,如果你用一个大于length的数组下标来存储一个元素,那么数组长度会变大以容纳新元素,不会发生越界错误。
  • 数组的length其实并不是表示数组的元素个数,它实际上表示的是数组的最大整数下标+1。
  • var arrName=[]
    arrName[10000]=1;

    就比如上面这段代码中arrName.length为10001,但是实际上你知道的,它只有一个元素。

  • 给arrName.length赋值,如果大于当前值,也不会分配更多空间,如果小于当前值,比如新值为100,会导致下标大于且等于100的的元素被删除掉。

关于数组元素的删除

  • 前面讲到对象的删除为 delete obj.name或者 delte myObj["name"],而又说道数组其实是一个对象那么当然也是可以delete arrName[2];
  • 但是你要知道delete方法过后arrName[2]成了undefined,但是arrName[1]和arrName[3]值不变
  • 然而我们脑海中的数组元素的删除通常是想要arrName[3]前移去替代arrName[2]的位置
  • 所以JS提供了splice这种方法,arrName.splice(2,3),就是删除下标为2的元素开始的三个元素。当然对于大型数组来说效率不高。
  • var arrName=[1,2,3,4,5,6];
    arrName.length=50
    arrName.splice(2,3);//删除后数组为[1,2,6,undefined。。。],arrName.length为47

关于判断一个值是否为数组 

var isArray=function(value){
    return value && typeof value==='object' && value.constructor===Array;
};

但是上面的方法在识别不同窗口或frame里构造的数组时会失败,所以下面有一种更好的方法

var isArray=function(value){
    return Object.prototype.toString.apply(value)==='[object Array]';
};

好吧,这种鬼东西记在这里就得了,别记在脑子里,毕竟容量有限。

关于数组的属性与方法

前面说过了,数组实际上就是对象。那么给数组添加方法和属性都可以像对象那样。

有一点要注意的是,arrName.myName这种属性添加后,arrName.length并没有改变,因为这并不是一个整数类型的属性

原文地址:https://www.cnblogs.com/vvjiang/p/5150081.html