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接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
JavaScript.Encode手动解码技巧
Jul 14 Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
jQuery中操控hidden、disable等无值属性的方法
Jan 06 Javascript
javascript解析json数据的3种方式
May 08 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
JavaScript的removeChild()函数用法详解
Dec 27 Javascript
微信小程序开发背景图显示功能
Aug 08 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中的traits实现代码复用使用实例
2015/05/13 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
node.js超时timeout详解
2014/11/26 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
python如何在终端里面显示一张图片
2016/08/17 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python global全局变量函数详解
2018/09/18 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python通过Pillow实现图片对比
2020/04/29 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
优秀体育委员自荐书
2014/01/31 职场文书
人事任命书怎么写
2014/06/05 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书