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 相关文章推荐
一个简单的jquery进度条示例
Apr 28 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
javascript中HTMLDOM操作详解
Dec 11 Javascript
jQuery中[attribute]选择器用法实例
Dec 31 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
微信小程序 传值取值的几种方法总结
Jan 16 Javascript
详解基于vue-router的动态权限控制实现方案
Sep 28 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
May 03 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
webpack 静态资源集中输出的方法示例
Nov 09 Javascript
使用Vue CLI创建typescript项目的方法
Aug 09 Javascript
VUE中使用HTTP库Axios方法详解
Feb 05 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文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
django中模板的html自动转意方法
2018/05/27 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
python 杀死自身进程的实现方法
2019/07/01 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
Python如何定义有默认参数的函数
2020/08/10 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
运动会广播稿50字
2014/01/26 职场文书
社区安全检查制度
2014/02/03 职场文书
团日活动总结怎么写
2014/06/25 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
离职告别感言
2015/08/04 职场文书
2019个人半年工作总结
2019/06/21 职场文书