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代码,用以防止图片撑破页面
Mar 12 Javascript
jQuery.extend 函数详解
Feb 03 Javascript
jQuery使用技巧简单汇总
Apr 18 Javascript
jquery ajax 调用失败的原因示例介绍
Sep 27 Javascript
Backbone.js框架中Model与Collection的使用实例
May 07 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
浅谈webpack4 图片处理汇总
Sep 12 Javascript
微信小程序实现留言板功能
Nov 02 Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP count()函数讲解
2019/02/03 PHP
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
js post提交调用方法
2014/02/12 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
常用python编程模板汇总
2016/02/12 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
关于Python数据结构中字典的心得
2017/12/04 Python
浅谈Python type的使用
2019/11/19 Python
什么是Python中的匿名函数
2020/06/02 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
九年级数学教学反思
2014/02/02 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
教师远程研修感悟
2015/11/18 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python