JavaScript中数组的常用方法以及函数对象的方法call()与apply()

1 arr.forEach()循环

说明:

  • 该方法需要一个函数作为参数(这个函数由我们创建而不由我们调用—回调函数)
  • 数组arr中有几个元素,调用forEach()方法时,就会被执行几次。每次执行时,浏览器就会将遍历得到的元素以形参的形式传递尽量,我们可以定义形参,来读取这些内容
    在这里插入图片描述
    3.浏览器会在回调函数中传三个参数:
  • 第一个参数:就是数组arr中的元素(即被遍历数组的每个元素)
  • 第二个参数:每个元素所对应的索引
  • 第三个参数:就是正在被遍历的数组本身(arr)
    在这里插入图片描述

2 arr.slice()–提取数组中的指定元素

说明:

1.该方法可以用来提取数组指定元素
2.该方法不会改变数组,而是将截取到的元素封装在一个新的数组中返回,因此想要获取截取的,比如a=[4,5,8,9],arr.slice(0,2),console.log(arr)的结果仍然是4,5,8,9];若使用var result=arr.slice(0,2),那么console.log(result)便可以得到:4,5
3.参数:

  • 第一个参数:截取开始的位置的索引
  • 第二个参数:截取结束的位置的索引(0,2)–0,1,不包括2

3 arr.splice()

说明:
1.使用splice可以删除数组中指定的元素
2.可以使用新的元素替换数组中指定的元素
3.可以给数组指定位置添加新的元素
4.使用splice会影响原数组,比如你删除指定索引号的数组元素时,会将指5.定元素从原数组中删除,并将被删除的元素作为返回值返回
5.参数:

  • 第一个参数:表示开始位置的索引
  • 第二个参数:表示删除的数量
  • 第三个参数及以后的参数:可以传递一些新的元素,这些元素将会自动插入到开始索引前边
    ps:第三个参数可不传)
    在这里插入图片描述

4arr.concat()

说明:

  1. concat()连接数组
  2. 该方法不会对原数组产生影响
  3. 参数可以为数组,可以为字符串,最终以新数组返回

5.arr.join()

说明:
1.该方法可以将数组转换为字符串
2.在join()中可以指定一个字符串作为参数,这个字符串将会称为数组中元素的连接符
3.该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回
在这里插入图片描述

6.arr.sort()

说明:
1.由于排序其默认是以二进制编码进行排序的,因此不是我们想到的结果,我们可以自定义排序规则
2.即是在sort中添加一个回调函数作为参数,来指定排序规则

  • 回调函数中需要定义两个形参。比如function(a,b)

  • 浏览器将会分别使用数组中的元素作为实参去调用回调函数

  • 浏览器会根据回调函数的返回值来决定元素的顺序
    1)如果反会大于0的值,则元素会交换位置
    2)返回值小于0,则元素位置不变
    3)返回值为0,则默认两个元素相等,也不交换位置

  • 使用哪个元素调用不确定,但是肯定的是在数组中a一定在b前面
    1)如果需要升序排序,使用a-b
    2)如果需要降序排序,使用b-a

arr=[1,8,9,5,6,4]
arr.sort(function(a.b){
	if(a-b>0){
		return 1;/*升序*/
	}if(a-b<0){
		return -1;
	}else{
		return 0;
	}
})

优化代码:

arr.sort((a,b)=>return a-b;)

7.call() 与 apply() 方法

说明:
1.这两个方法都是函数对象的方法,需要通过函数对象来调用

function fun(){
	alert("xxxx");
}

fun()   /*------调用的是函数的返回值,此时对象为window*/
fun     /*----函数对象*/
/*因此函数对象调用方式为
fun.call()或者fun.apply()

2.当对函数调用call()和apply()都会调用函数执行,入上代码中,fun.apply()和fun.call()都会弹出alert(“xxxx”)
3.在调用用call()和apply()可以将指定对象,作为call和apply方法的第一个参数
1 ) 第一个参数:指定对象(将作为函数执行时的this—此处举例的函数为fun)
2 ) 第二个以及以后的其他参数:可以作为实参传给fun

  • 此时这个指定的对象将作为函数执行的this(这个对象可以任意)
obj1={
	name="obj1"
	sayname=function(){
		return this,name;
	}
}

obj2={

	name="obj2"
}

obj1.sayname.apply(obj2)  

分析:对于以上代码,obj1的函数对象sayname调用了apply方法时,将obj2指定为该函数的this对象,因此返回的时this.name即是obj2.name—obj2

使用call()和apply()的区别:
1)call()方法可以将实参在对象后依次传递
2)apply()方法需要将实参封装到一个数组中统一传递

在这里插入图片描述
这里再补充一些this指向情况:

  • 以函数形式调用时:this永远指向window
  • 以方法的形式调用时,this是嗲用方法的对象
  • 以构造函数的形式嗲用是,this是新创建的哪个对象
  • 使用call和apply调用时,this时其参数中指定的对象

8 封装实参的对象 arguments

1)arguments是一个类数组数组对象(arguments instanceof Array)返回flase,它可以通过索引来操作数组,也可以获取长度
2)在调用函数时,我们所传递的实参都会在arguments中保存(即使在函数中我们没有定义形参,但是仍然传递了实参)
3)arguments.length可以用来获取实参的长度

在这里插入图片描述
4)即使在函数中我们没有定义形参,但是仍然传递了实参,此时我们仍然可以使用arguments来使用所传递的实参

  • arguments[0]表示第一个实参
  • arguments[n]表示第n个实参

5.arguments有一个函数对象—callee,该对象指向当前函数的对象
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值