push.apply和push的问题

push.apply和push的问题

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
       var a1=[1,2,3];
       var a2=["a","b","c"];
       var b=a1.push.apply(a1,a2);
       console.log(a1);
       console.log(a2);
       console.log(b);//6
       var c1=[1,2,3];
       var c2=["a","b","c"];
       var d=c1.push(c2);
       console.log(c1);
       console.log(c2);
       console.log(d);//4
    </script>
</body>
</html>

看了一下输出,使用push.apply的话,是a2里的每个元素依次添加进a1。直接使用push则是c2数组作为一个元素添加进c1。请问为什么会有这样的区别?

另外,a1.push.apply(a1,a2)这句里面,push前面写a1还是a2是不是无所谓,只要有push方法就行?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, 抱歉老师描述的不严谨, 给同学造成了困扰,

apply的第一个参数是用来替换的操作对象,第二个参数是要变成push参数的数组。push方法内部会自动处理这个数组参数的。

老师这里给同学举个例子对比一下, 帮助同学理解

1、 如下图打印函数的参数arguments

http://img1.sycdn.imooc.com//climg/5cd3f54a0001391504620398.jpg 

效果图:

http://img1.sycdn.imooc.com//climg/5cd3f5c70001cc6909940191.jpg

因为只是用一个形参a接收传入的参数, 所以只打印了以第一个参数1

2、 使用四个形参接收传入的变量,如下图

http://img1.sycdn.imooc.com//climg/5cd3f64d0001cccb05780525.jpg

效果图:

http://img1.sycdn.imooc.com//climg/5cd3f69c0001b33b09330427.jpg

同学可以结合示例下去练习一下, 加深理解, 如果还有以后可以继续在问答区提问, 我们会继续为你解答的

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

好帮手慕慕子 2019-05-09 15:27:26

同学你好, 出现的这样的区别主要是因为push只能传递一个参数。 而apply()方法第二参数可以接受一个数组,让这个数组作为参数的方式传递给调用他的函数。

所以a1.push.apply(a1, a2)会将数组a2依次添加进a1。c1.push(c2)是直接将c2添加进c1

另, 要有push方法 a1.push.apply(a1, a2)这里的前面写a1或者a2都可以

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 慕瓜9218797 #1
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function test(a){ alert(a); } function fn(){} var num=[1,2,3,4]; test.apply(fn,num);//弹出1 </script> </body> </html> 这段代码的运行后只弹出一个1,并没有连续弹出四个对话框。数组里后面几个数似乎是被忽略了。push既然只能传递一个参数,为什么用apply调用后能够将数组里的所有元素依次传递进去,而不是被忽略呢?
    2019-05-09 16:47:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

HTML5&CSS3进阶与常用框架 2018
  • 参与学习       315    人
  • 提交作业       136    份
  • 解答问题       626    个

如果你有H5、CSS3、JS基础,热爱前端并希望在前端应用方面不断进步,那就来吧,本路径为你带来的课程有HTML5进阶、CSS3进阶、JS面向对象、jQ基础、Less等,助你进一步提升前端开发技能

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师