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 事件系统
Jul 22 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
js鼠标跟随运动效果
Mar 11 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
AngularJS 事件发布机制
Aug 28 Javascript
js的新生代垃圾回收知识点总结
Aug 22 Javascript
小程序中设置缓存过期的实现方法
Jan 14 Javascript
vue cli4.0项目引入typescript的方法
Jul 17 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
深入了解php4(2)--重访过去
2006/10/09 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
json跟xml的对比分析
2008/06/10 Javascript
js window.event对象详尽解析
2009/02/17 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python的Flask框架的简介和安装方法
2015/11/13 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
机器学习python实战之手写数字识别
2017/11/01 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
解除租房协议书
2014/12/03 职场文书
小学六年级毕业感言
2015/07/30 职场文书
医学会议开幕词
2016/03/03 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书