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 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
js判断url是否有效的两种方法
Mar 04 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
js中unicode转码方法详解
Oct 09 Javascript
jquery拖拽排序简单实现方法(效果增强版)
Feb 16 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
基于jQuery的checkbox全选问题分析
Nov 18 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
bootstrap按钮插件(Button)使用方法解析
Jan 13 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
JavaScript oncopy事件用法实例解析
May 13 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
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python获取服务器信息的最简单实现方法
2015/03/05 Python
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
儿童编程python入门
2018/05/08 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
详解Python中的测试工具
2019/06/09 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
关于梦想的演讲稿
2014/05/05 职场文书
环保倡议书100字
2014/05/15 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android