• JavaScript 中的数组类型


    1.定义

    数组是按次序依次排列的一组值

    • 任何数据类型都可以放入数组
    • 数组可以嵌套形成多维数组
    const arr = [0,'1',{},function(){}];
    
    //二维数组
    const arr1 = [1,2,[3,4,5],6];
    
    • 1
    • 2
    • 3
    • 4

    2.数组的本质

    数组是一种特殊的对象,数组的key是正整数字符串,我们一般使用数字键操作数组,会自动转换成字符串

    const arr = [];
    arr['1'] = 1;
    
    //1被自动转换成'1'
    console.log(arr[1],arr['1']); //1
    
    typeof arr; //obejct
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.数组的length

    数组的length计算的是数组中正整数的个数,但你依然可以将数据的key设置为其它类型的值,不过这不会增加length的长度

    const arr = [];
    arr[2.1] = 2.1;
    arr['a'] = 'a';
    
    console.log(arr); //[2.1: 2.1, a: 'a']
    console.log(arr.length); //0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    length是可写的

    const arr = [1,2,3,4,5];
    arr.length = 2;
    console.log(arr); //[1,2]
    
    • 1
    • 2
    • 3

    4. in

    in关键用来判断数组中存在某个键,可应用于数组和对象

    const arr = ['a','b'];
    1 in arr; // true
    2 in arr; //fasle
    
    • 1
    • 2
    • 3

    5. for…in

    • for…in用来遍历数组和对象
    • 遍历数组的时候不仅能遍历整数的key,还能遍历所有非整数的key
    • Object.keys()也能获取到数组的非整数的key
    const arr = [1,2];
    arr['a'] = 3;
    arr[4.5] = 4;
    
    for(key in arr){
     console.log(key);
    };
    // 0
    // 1
    // a
    /  4.5
    
    Object.keys(arr); // ['0', '1', 'a', '4.5']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6.数组的空位

    • 即两个逗号之间没有任何值会产生空值(empty)
    • 使用delete会产生empty
    • 数组的lengt包含empty
    var arr = [1,5,,8];
    console.log(arr); //[1, 5, empty, 8]
    
    //使用delete也会产生空值
    delete arr [0];
    console.log(arr); //[empty, 5, empty, 8]
    console.log(arr.length); //4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 空值和undefined有所区别,undefined参与for…in和forEach的遍历,empty不参与遍历
    • Object.keys能获取到undefined的key获取不到empty的key
    • 使用length能遍历出empty
        const arr1 = new Array(10); //[empty × 10]
        for (key in arr1) {
          console.log(arr1);
        }; //无输出,没有进行遍历
    
        arr1.forEach((v) => {
          console.log(v)
        }); //无输出,没有进行遍历
    
        console.log(Object.keys(arr1)); //[]
    
        const arr2 = [undefined, undefined, undefined]; //[empty × 10]
        for (key in arr2) {
          console.log(key);
        };
        //0
        //1
        //2
    
        arr2.forEach((value, index) => {
          console.log(value, index)
        });
        // undefined,0
        // undefined,1
        // undefinef,2
    
        console.log(Object.keys(arr2)); //[3]
    
    
        // 使用for循环遍历empty
        for(let i = 0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    7.类数组(伪数组)

    类数组的定义:键名都是正整数或零,拥有length属性

    const arrayLike = { 
      0:'a', 
      1:'b', 
      2:'c', 
      length:3 
      };
    arrayLike[3] = 'd';
    console.log(arrayLike[0]); //a
    console.log(arrayLike.length); //3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    上面的代码为arrayLike添加了一个数字键,但length没有改变,这就说明arrayLike不是数组

    典型的类数组有函数的arguments、大多数的元素DOM集合、字符串

    function foo(){
      console.log(arguments);
    };
    foo('tom','jack');
    // {0:'tom', 1:'jack', length:2, callee:...}
    
    console.log(document.getElementsByClassName('a'));
    //{"0": ...,"1": ...,"2":..., "length":3}
    
    const str = 'apple';
    console.log(str.length); //5
    consoel.log(str[2]); //p
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    伪数组转为数组

    • 使用Array.prototype.slice
    • 使用拓展运算符
    function foo(){
      const arr = Array.prototype.slice.call(arguments);
    }
    
    function foo(){
      const arr = [...arguments]
    }
    
    function foo(...args){
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    总结

    • 数组的empty和undefined有所区别,empty不会被for…in和forEache以及Object.keys运算,但计算length的时候会包含empty,因此使用length循环带有empty的数组时要格外小心
    • 类数组也叫伪数组,是指对象的属性为正整数或者零而且具有length属性的对象
    • 使用Array.prototype.slice.call()或者拓展运算符将类数组转换为数组,类数组可以使用call函数借用数组的方法
  • 相关阅读:
    用 Jmeter 工具做个小型压力测试
    vue中渲染器原理
    Python —— 接口自动化(1)
    springboot自定义全局异常,非空等参数校验异常
    代码随想录算法训练营 动态规划part14
    Python MQTT订阅消息QOS=1的注意点
    Haddop+Hive 单机hadoop 单机hive
    005:vue2使用vue-type-writer实现打字机效果
    vue项目的Husky、env、editorconfig、eslintrc、tsconfig.json配置文件小聊
    领域驱动设计:从后端到前端
  • 原文地址:https://blog.csdn.net/qq_44621394/article/details/126990720