数组 简单讲解

129 阅读5分钟

/** 数组

     *  数组:   存放一些数据的集合
     *          也是引用数据类型(复杂数据类型)
     *              数组/对象/函数
                数组是一个紧密型结构
     *          当将数组中指定下标位置的元素删除或者添加时,都会引起这个位置之后元素的位置变动
     * 
     *  数组和对象将来如何选择?
     *      示例:   
     *          商品的详情存放到某一个对象中, 比如: 商品名, 商品价格, 商品折扣, 商品描述....
     *          
     *          商品列表假设有 100个商品, 那么你就有100个商品详情, 按照上述的封装那么你有100个对象
     *          我们可以将 这 100个 对象, 存放到某一个数组中, 进行维护管理
    */
  

数组的长度介绍

     *      数组的长度并固定, 取决于数组内部有多少个元素
     *      查看方式:
     *              1. 打印数据, 在控制台展开数组, 找到最后的length
     *              2. 打印 数组名.length
     * 
     *      当 数组的 长度 === 0        代表当前数组为空数组
     
                     var arr = ["a", "b", "c", "d", "e"];
                     console.log(arr.length);//数组的长度,当前数组中有多少个元素

                     arr.length是一个可读可写但是不能删除的属性

                      console.log(arr.length)

数组的索引(下标)

     * 
     *      有什么用?
     *          表明 数组 的这个位置上 有什么内容
     * 
     *      注意:
     *          下标是固定的, 永远是 0 1 2 3 4 5 ....
     *          但是下标对应的内容, 不是固定的
    */

            var arr = [1, 2, 3, 4, 5]
            //  下标:   0 1  2  3  4


            console.log('原数组: ', arr)
            // console.log(arr[0]) // 会得到当前数组下标0这个位置上的值   1
            // console.log(arr[3]) // 会得到当前数组下标0这个位置上的值   4

            // 通过数组的下标, 我们也可以修改数组中某一个元素的内容
            arr[2] = '新的数据'

            console.log('修改后的数组: ', arr)


            // var arr1 = [100, 200, 'QF004', true]
            // var arr2 = [5, 4, 3, 2, 1]
            // console.log(arr1)
            // console.log(arr2)
            

数组长度特点1

                1  当长度变的比原来小的时候,多余的元素就会被删除
                      arr.length=3;
                      console.log(arr);
                2   当新长度大于原来数组的长度时,会在数组后天添加对应多余的空元素
                      arr.length=10;
                      console.log(arr);/、

                3   删除最后一个元素
                      arr.length--;

                4  在数组尾部添加一个空元素
                      arr.length++;

                
                5 数组中最大下标值 是长度-1
                      将数组的最后一个元素替换为z
                      arr[arr.length-1]="z";
                      console.log(arr);
                      在数组的尾部添加一个新元素“z”
                      arr[arr.length]="z";
                      console.log(arr)

数组长度特点2

               var  arr=["a","b","c","d","e","f"];
               1、将数组中最后两个元素删除
               arr.length-=2;
               2、给数组最后添加一个"z"
               arr[arr.length]="z";
               3、将数组的最前面的一项替换为"0"
               arr[0]="0"
               4、将数组的所有元素清空
               arr.length=0;  
              // 不要使用 arr=[]这是改变引用地址,不是清空原数组,会造成泄漏

创建数组

      数组创建
      字面量创建数组
      var arr=[1,2,3,4];
      arr[4]=5;
   2. 内置构造函数的方式创建
      var arr=new Array(1,2,3,4,5,6);
      console.log(arr);

      如果使用 new Array创建数组时,只写了一个参数,并且这个参数是数值型
      1、这个参数是一个正整数的时候,则表示创建了一个这个整数为长度的空元素数组
      2、这个参数如果是一个负数或者一个小数,NaN,则会报错Uncaught RangeError: Invalid array length 范围错误,无效的数组长度
      3· 如果使用new Array创建数组时,只写一个参数,并且这个参数不是数值类型,则表示创建一个长度数组,这个参数即为这个数组中的第0项元素
      var arr=new Array(5);
      var arr=new Array(-2);
      var arr=new Array(1.2);
      var arr=new Array("5");
      var arr=new Array(NaN);
      var arr=new Array(true);
      console.log(arr);

      这种不写new和写new的一样
      var arr=Array(6);

关于数组与空元素

1.  数组中添加一个空元素,最后这个空元素将不会记录长度
  var arr=[1,2,3,,,];
  console.log(arr.length);
  var arr=[,];
  console.log(arr.length)

  var arr=[,,];
  console.log(arr.length)

   2. 空元素  不是undefined,但是空元素与undefined相等
      var arr=[1,,2];
      console.log(arr[1]===undefined);// true

      var arr=[1,undefined];//2
      var arr1=[1,];//1
      console.log(arr.length,arr1.length)
      

数组遍历

        需求: 拿到数组各个位置上的值
   
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2]
        // 下标    0  1  2  3  4  5  6  7  8  9

        // console.log(arr[0])
        // console.log(arr[1])
        // console.log(arr[2])

        // for (var i = 0; i <= arr.length - 1;) {
        for (var i = 0; i < arr.length; i++) {
            // console.log(i)
            console.log(arr[i])
        }

数组遍历 与空元素

     var arr = ["a", "b", "", undefined, , "c", 0, "d"];
     // 空元素不是undefind ,打印出来表现为undefind。
   1. for in遍历数组时,不会遍历空元素,如果当前数组有属性(比如创建arr.a=10)那么这个a也会被遍历到
    // for(var key in arr){
    //     console.log(arr[key])
    // }

    //但 为什么for in不会遍历空元素
  2.  // for in循环遍历时考虑是对象遍历,对象典型特征是键值对 键 值对应   数组中的空元素 只有键名没有值,不是键值对,只有键名 for in就不会遍历

     var obj={a:1,b:2,c:3};
     console.log("a" in obj);//"a"是obj对象的一个属性,并且是键值对存在
     console.log("d" in obj);


     var arr=[1,,2];
     console.log(0 in arr);//把数组arr看做一个对象的话,下标0是不是这个对象的属性
     console.log(1 in arr);//空元素,判断下标1是不是数组的属性,false 表明是个空元素
     console.log(2 in arr);
     console.log(3 in arr);
    // 判断数组中这个下标对应的元素是不是空元素  if(下标 in arr){ }
    
3.   数组遍历 与空元素                                        
  // 遍历数组时,不遍历空元素
    var arr = ["a", "b", "", undefined, , "c", 0, "d"]; 
     for(var i=0;i<arr.length;i++){
         if(i in arr){
             console.log(i,arr[i]);
         }
     }
     

数组遍历 去掉空数组 结果

image.png

二、delete关键字 删除 创建空元素方法

      1. var arr = [1, 2, 3, 4, 5]
         arr.length++
         console.log(arr);
   
     2.  var obj = { a: 1, b: 2, c: 3 }
         console.log(obj);
        删除对象下的属性a
        delete obj.a
        console.log(obj);
        var arr = [1, 2, 3, 4]
        // 当使用delete删除数组中的某个下标对应的元素时,就会使这个下标对应的元素变为空元素
        // 不是删除这个元素,所以不会改变数组的长度,不会造成后面的元素向前移动
        // delete arr[0]
        // console.log(arr);
        delete arr[arr.length - 1]
        console.log(arr.length, arr);