数组

数组(Array)

  • 数组简介

    • 数组也是一个对象,它和我们普通对象功能类似,也是用来存储一些值的
    • 不同的是普通对象是使用字符串作为属性名,而数组是使用数字来作为索引操作元素,索引从0开始
  • 使用构造函数创建数组对象

    • var arr=new Array();
  • 获取数组的长度 length

    • 可以使用length属性来获取数组的长度(元素的个数) 语法: 数组.length

    • 对于连续的数组,使用length可以获取到数组的长度 (元素的个数)

    • 对于非连续的数组,使用length会获取到数组的最大的索引+1,尽量不要创建非连续的数组

    • 修改length

      • 如果修改的length大于原长度,则多出部分会空出来
      • 如果修改的length小于原长度,则多出的元素会被删除
    • 使用length向数组的最后一个位置添加元素

      • 语法: 数组[数组.length] =值 如 arr[arr.length]=30;
  • 使用字面量来创建数组

    • var arr=[];
    • 使用字面量创建数组时,可以在创建时就指定数组中的元素
      • var arr=[1,2,3,4,5];
  • 使用构造函数创建数组时,也可以同时添加元素,将要添加的元素作为构造函数的参数传递

    • 元素之间用逗号(,)隔开 var arr2=new Array(10,20,30);
  • 数组中的元素可以是任意的数据类型

    • var arr=["hello",1,true,null,undefined];
  • 数组中的元素也可以是对象

    • var obj={name:"雪风"};

      arr[arr.length]=obj; //向数组的最后一个元素添加一个对象元素

      arr=[{name:"雪风"},{name:"岛风"},{name:"天津风"}];

  • 也可以是一个函数

    • arr = [function(){alert(1)},function(){alert(2)}];
  • 数组里还能放数组 – 二维数组

    • arr =[[1,2,3],[4,5,6],[7,8,9]];

      console.log(arr[1]);


数组的四个方法

  • push()

    • 该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度

    • 可以将要添加的元素作为方法的参数传递,

      ​ 这些元素将会自动添加到数组的末尾

    • 该方法会将数组新的长度作为返回值返回

<script>
      var arr=["时津风","初风","浦风"];
  	var result=arr.push("雪风","天津风","岛风","谷风");
  	console.log(arr);
 </script>
  • pop()

    • 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
 <script>
        var arr=["时津风","初风","浦风"];
    	var result=arr.push("雪风","天津风","岛风","谷风");
        result=arr.pop();
    			console.log(result);  返回"谷风"
    </script>

  • unshift()

    • 向数组开头添加一个或多个元素,并返回新的数组长度

      arr.unshift("舞风","矶风");

      向前边插入元素以后,其他的元素索引会依次调整

  • shift()

    • 可以删除数组的第一个元素,并将被删除的元素作为返回值返回

      result=arr.shift();

      console.log(result); 返回"时津风"


数组的遍历

<script>
      `function Person(name,age){
          this.name=name;
          this.age=age;
     }
      Person.prototype.toString() =function(){
        return "Person[name="+this.name+",age="+this.age+"]"
      };
      var  per1=new  Person("雪风",12);
      var  per2=new  Person("岛风",12);
     var  per3=new  Person("雪风",12);
     var  per4=new  Person("谷风",12);
      var  per5=new  Person("初风",12);
      //将这些对象放入一个数组
      var perArr=[per1,per2,per3,per4,per5];
      //创建一个函数,可以把perArr中满12的Person提取出来。并封装到一个新的数组中
      function getTwelve(arr){
       //创建一个新的数组
          var newArr=[];
          //遍历arr,获取arr中Person对象
          for(var i=0;i<perArr.length;i++){
              if(perArr[i].age>=12){
                  newArr.push(perArr[i]);
              }
          }
          //将新的数组返回
          return newArr;
      }
  </script>
  • forEach方法

    • 一般我们都是使用for循环去遍历数组,但是还有一个forEach()方法也可以用来遍历数组

    • forEach()方法 只支持IE8以上的浏览器,IE8及以下的浏览器均不支持该方法,如果需要兼容IE8就不要使用forEach()

      • forEach()方法需要一个函数作为参数

        数组中有几个元素函数就会执行几次,每次执行时,浏览器会将遍历到的元素

        ​ 以实参的形式传递进来,我们可以来定义形参,来读取这些内容

        浏览器会在回调函数中传递三个参数

        第一个参数,就是当前正在遍历的元素

        第二个参数,就是当前正在遍历的元素的索引

        第三个参数,就是正在遍历的数组

<script type="text/javascript">
        var arr=["雪风","岛风","天津风","谷风","初风"];
        arr.forEach(function(value,index,obj){//想这种函数,由我们创建但是不由我们调用的,我们称为回调函数
             console.log(value); 
          });
      </script>

call()和apply()

  • 这两个方法都是函数对象的方法,需要通过函数对象来调用

    当对函数调用call()和apply()都会调用函数执行

    在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象将会称为函数执行时的this

<script>
      function fun(){
          alert(this);
      }
      fun.apply();
      fun.call();
      fun();//这三个函数效果是一样的  都是调用fun函数
      var obj={
          name:"雪风",
          sayName:function(){
              alert(this.name);
          }
      };
      var obj2={
          name:"岛风"
      };
      fun.call(obj);
      obj.sayName.apply(obj2); //返回 “岛风"   
  </script>
  • call()方法可以将实参在对象之后依次传递
 <script>
      function fun(a,b){
          console.log("a="+a);
          console.log("b="+b);
      }
        var obj={
          name:"雪风",
          sayName:function(){
              alert(this.name);
          }
      };
      var obj2={
          name:"岛风"
      };
      fun.call(obj,2,2); //a=2 b=2
  </script>
  • apply()方法需要将实参封装到一个数组里统一传递
<script>
      function fun(a,b){
          console.log("a="+a);
          console.log("b="+b);
      }
        var obj={
          name:"雪风",
          sayName:function(){
              alert(this.name);
          }
      };
      var obj2={
          name:"岛风"
      };
      fun.apply(obj2,[2,3]);
  </script>

this情况总结

  • 以函数形式调用时,this永远都是window
  • 以方法的形式调用时,this是调用方法的对象
  • 以构造函数的形式调用时,this是新创建的那个对象
  • 使用call和apply调用时,this是指定的那个对象

arguments

  • 在调用函数时,浏览器每次都会传递两个隐含的参数

    • 1.函数的上下文对象 this

    • 2.封装实参的对象 arguments

      • arguments是一个类数组对象,它可以通过索引来操作数组,也可以获取长度

        在调用函数时,我们所传递的实参都会在arguments中保存

        arguments.length可以用来获取实参的长度

        我们即使不定义形参,也可以通过arguments来使用实参

        ​ 只不过麻烦

        ​ arguments[0] 表示第一个实参

        ​ arguments[1] 表示第二个实参

      • arguments还有一个属性callee

        • 这个属性对应一个函数对象,就是当前正在执行的函数的对象
 <script>
          console.log(arguments instanceof Array);//false
          console.log(Array.isArray(arguments));//false
          function fun(){
              console.log(arguments[1]);
              console.log(arguments.callee == fun);//true
          }
          fun("雪风","岛风");
      </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值