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中 关于prototype属性实现继承的原理图
Apr 16 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
javascript的解析执行顺序在各个浏览器中的不同
Mar 17 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
Apr 01 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
详解vue-cli官方脚手架配置
Jul 20 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
微信小程序实现多选框功能的实例代码
Jun 24 Javascript
用JS写一个发布订阅模式
Nov 07 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获取地址栏信息的代码
2008/10/08 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
厂区绿化方案
2014/05/08 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
教师师德考核自我评价
2014/09/13 职场文书
给老师的感谢信
2015/01/20 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android