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 相关文章推荐
不错的JS中变量相关的细节分析
Aug 13 Javascript
一段效率很高的for循环语句使用方法
Aug 13 Javascript
JavaScript 通过模式匹配实现重载
Aug 12 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
Vue-resource实现ajax请求和跨域请求示例
Feb 23 Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 Javascript
详解mpvue开发微信小程序基础知识
Sep 23 Javascript
8个非常实用的Vue自定义指令
Dec 15 Vue.js
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模板引擎SMARTY
2006/10/09 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP取进制余数函数代码
2012/01/19 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP多文件上传类实例
2015/03/07 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
Python入门篇之列表和元组
2014/10/17 Python
深入了解python中元类的相关知识
2019/08/29 Python
Python 线程池用法简单示例
2019/10/02 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
房地产销售大学生自我评价分享
2013/11/11 职场文书
平安工地建设方案
2014/05/06 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
党员进社区活动总结
2015/05/07 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
团支部书记竞选稿
2015/11/21 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers