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 相关文章推荐
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
Jul 19 Javascript
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
JS Replace 全部替换字符的用法小结
Dec 24 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
RequireJS入门一之实现第一个例子
Sep 30 Javascript
jquery实现图片上传前本地预览功能
May 10 Javascript
微信小程序-消息提示框实例
Nov 24 Javascript
vue内置组件transition简单原理图文详解(小结)
Jul 12 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 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
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
js自制图片放大镜功能
2017/01/24 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
菊花转动的jquery加载动画效果
2018/08/19 jQuery
ElementUI radio组件选中小改造
2019/08/12 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
Python标准库之collections包的使用教程
2017/04/27 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
解决python删除文件的权限错误问题
2018/04/24 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
Python 切分数组实例解析
2019/11/07 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
房屋质量投诉书
2015/07/02 职场文书
PHP命令行与定时任务
2021/04/01 PHP