js中apply和Math.max()函数的问题及区别介绍

 更新时间:2018年03月27日 11:51:07   投稿:mrr  
这篇文章主要介绍了js中apply和Math.max()函数的问题,本文给大家带来两种答案,每一种答案给大家介绍的非常详细,在文章底部给大家提到了js中Math.max.apply和Math.max的区别,感兴趣的朋友一起看看吧

下面给大家介绍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的一些看法

    最近在写一个JS代码压缩工具的时候,感受到JS的强大,同时也让我头疼的一阵子(谁叫我是JS菜鸟)。
    2009-05-05
  • javascript 网站常用的iframe分割

    javascript 网站常用的iframe分割

    就是一个页面使用两个iframe来调用内容,实现页面导航,更容易控制,可控制性好
    2008-06-06
  • 判断文件是否正在被使用的JS代码

    判断文件是否正在被使用的JS代码

    这篇文章主要介绍了判断文件是否正在被使用的JS代码,有需要的朋友可以参考一下
    2013-12-12
  • 浅谈bootstrap使用中的一些问题以及解决过程

    浅谈bootstrap使用中的一些问题以及解决过程

    下面小编就为大家带来一篇浅谈bootstrap使用中的一些问题以及解决过程。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 整理关于Bootstrap过渡动画的慕课笔记

    整理关于Bootstrap过渡动画的慕课笔记

    这篇文章主要为大家整理了关于Bootstrap动画过渡的慕课笔记,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 微信小程序多音频播放进度条问题

    微信小程序多音频播放进度条问题

    小程序的音频组件居然没有进度控制的功能,需要我们自己实现,下面脚本之家小编给大家带来了微信小程序多音频播放进度条问题,感兴趣的朋友一起看看吧
    2018-08-08
  • js中DOM三级列表(代码分享)

    js中DOM三级列表(代码分享)

    本篇文章主要介绍了js中DOM实现三级列表的代码,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • JavaScript this关键字的深入详解

    JavaScript this关键字的深入详解

    这篇文章主要给大家介绍了关于JavaScript this关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • ztree获取当前选中节点子节点id集合的方法

    ztree获取当前选中节点子节点id集合的方法

    这篇文章主要介绍了ztree获取当前选中节点子节点id集合的方法,实例分析了ztree的方法transformToArray使用技巧,需要的朋友可以参考下
    2015-02-02
  • 一文详解如何在项目中和平时练习中应用es6语法

    一文详解如何在项目中和平时练习中应用es6语法

    ES6是JavaScript的一个版本,因为我们前面用到的vue默认使用ES6语法开发,所以我们在这一节补充ES6的知识点,下面这篇文章主要给大家介绍了关于如何在项目中和平时练习中应用es6语法的相关资料,需要的朋友可以参考下
    2022-11-11

最新评论