• 【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并没有改变,因为这并不是一个整数类型的属性

  • 相关阅读:
    SpringMVC常用注解
    在Java 中,如何跳出当前的多重嵌套循环?
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    查看远程库信息(git remote的用法)
    webpack和gulp的比较
    git pull 和git fetch的区别
    什么是性能优化?
    第一阶段的任务及燃尽图(第五天)
    第一阶段的任务及燃尽图(第二天)
    第一阶段的任务及燃尽图(第一天)
  • 原文地址:https://www.cnblogs.com/vvjiang/p/5150081.html
Copyright © 2020-2023  润新知