js中apply和Math.max()函数的问题及区别介绍


Posted in Javascript onMarch 27, 2018

下面给大家介绍js中apply和Math.max()函数的问题,具体内容如下所示:

var arr=[1,3,6,3,7,9,2];
console.log(Math.max.apply(null,arr));

一直搞不懂为什么这样可以算出一个数组的最大值?一直想不明白,请js高手指教一下。

答案1

Function.apply()是JS的一个OOP特性,一般用来模拟继承和扩展this的用途,对于上面这段代码,可以这样去理解:

XXX.apply是一个调用函数的方法,其参数为:apply(Function, Args),

Function为要调用的方法,Args是参数列表,当Function为null时,默认为上文,

Math.max.apply(null, arr)

可认为是

apply(Math.max, arr)

然后,arr是一个参数列表,对于max方法,其参数是若干个数,即

Math.max(a, b, c, d, ...)

当使用apply时,把所有参数加入到一个数组中,即

arr = [a, b, c, d, ...]

代入到原式,

Math.max.apply(null, [a, b, c, d, ...])

实际上等同于

Math.max(a, b, c, d, ...)

在此处,使用apply的优点是在部分JS引擎中提升性能。

答案2

Math.max()方法,支持传递多个参数,比如:Math.max(1,4,2,3,7,5,6)

但是它不支持直接传递一个数组作为参数,比如:Math.max(new Array(1,4,2,3,7,5,6))

这里,只要我们有方法把数组,一个一个拆分开来,传递到Math.max()方法中,就实现了传递数组的方法。

所有函数都有apply(作用域链,参数)这个方法,这个函数的“参数”,接收一个数组,并且是将数组中的每个值,分开来,传递给调

补充:

Javascript中Math.max.apply和Math.max的区别

Javascript中的Math.max方法可以求出给定参数中最大的数。

> Math.max('1','2','3.1','3.2')
< 3.2
> Math.min(1,0,-1)
< -1

但如果是数组,就不能这样调用了。

此时就用到了apply方法:

apply 方法 (Function) (JavaScript)
调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数。
apply([thisObj[,argArray]])
thisObj
可选。 要用作 this 对象的对象。
argArray

可选。 要传递到函数的一组参数。
巧妙地使数组也可以调用Math.max和Math.min。

> Math.max.apply(null, ['1','2','3.1','3.2'])
< 3.2
> Math.min.apply(null, [1,0,-1])
< -1

总结

以上所述是小编给大家介绍的js中apply和Math.max()函数的问题及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 jQuery
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
详解vee-validate的使用个人小结
Jun 07 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 Javascript
详解Angular系列之变化检测(Change Detection)
Feb 26 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 Javascript
js编写简易的计算器
Jul 29 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 #Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 #Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 #Javascript
Angularjs实现控制器之间通信方式实例总结
Mar 27 #Javascript
Angular中使用better-scroll插件的方法
Mar 27 #Javascript
使用node打造自己的命令行工具方法教程
Mar 26 #Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 #Javascript
You might like
php连接数据库代码应用分析
2011/05/29 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
js实现返回顶部效果
2017/03/10 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
HTML5标签小集
2011/08/02 HTML / CSS
幼儿园教师请假制度
2014/01/16 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
初中学校军训方案
2014/05/09 职场文书
追悼会答谢词范文
2015/09/29 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
2019个人半年工作总结
2019/06/21 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS