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打开新窗口同时关闭旧窗口
Jan 16 Javascript
document.onreadystatechange事件的用法分析
Oct 17 Javascript
基于jquery的跨域调用文件
Nov 19 Javascript
JQuery UI的拖拽功能实现方法小结
Mar 14 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
js实现九宫格图片半透明渐显特效的方法
Feb 16 Javascript
JavaScript中的Promise使用详解
Jun 24 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
JavaScript多种页面刷新方法小结
Apr 04 Javascript
JavaScript 装逼指南(js另类写法)
May 10 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
php 错误处理经验分享
2011/10/11 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
jQuery cdn使用介绍
2013/05/08 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
js中的数组对象排序分析
2018/12/11 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python编程中的反模式实例分析
2014/12/08 Python
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
python 性能提升的几种方法
2016/07/15 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python 实现多维数组转向量
2019/11/30 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
创业计划书撰写原则
2014/01/25 职场文书
个人委托书范本汇总
2014/10/01 职场文书
老人节标语大全
2014/10/08 职场文书
见习期个人总结
2015/03/05 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技