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遍历 table的脚本
Jul 23 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
Jun 09 Javascript
JavaScript中的继承方式详解
Feb 11 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
vue项目实战总结篇
Feb 11 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
使用 Vue 实现一个虚拟列表的方法
Aug 20 Javascript
详解JVM系列之内存模型
Jun 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
mysql+php分页类(已测)
2008/03/31 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python中正则表达式与模式匹配
2019/05/07 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python pymsql模块的使用
2020/09/07 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
护士专业推荐信
2013/11/02 职场文书
大学四年规划书范文
2013/12/27 职场文书
数控机床专业自荐信
2014/05/19 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
《假如》教学反思
2016/02/17 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python
源码安装apache脚本部署过程详解
2022/09/23 Servers