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获取当前地理位置方法汇总
Dec 18 Javascript
JavaScript中Null与Undefined的区别解析
Jun 30 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
浅谈JS封闭函数、闭包、内置对象
Jul 18 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
Mar 09 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
vue实现动态列表点击各行换色的方法
Sep 13 Javascript
初试vue-cli使用HBuilderx打包app的坑
Jul 17 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
Vue触发input选取文件点击事件操作
Aug 07 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
Dec 28 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
织梦模板标记简介
2007/03/11 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
Python3爬楼梯算法示例
2019/03/04 Python
如何解决安装python3.6.1失败
2020/07/01 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
自我评价的正确写法
2013/09/19 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
社会实践活动总结
2015/02/05 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书