下面给大家介绍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()函数的问题及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍pandas中apply和transform方法的性能比较及区别介绍,包括了pandas中apply和transform方法的性能比较及区别介绍的使用技巧和注意事项,需要的朋友参考一下 1. apply与transform 首先讲一下apply() 与transform()的相同点与不同点 相同点: 都能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用。
问题内容: 如果我只是通过类似下面的函数,DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)是否有任何区别 因为返回值看起来几乎一样。并且文档仅告诉: apply()-> apply:Series或DataFrame 聚合()->聚合:DataFrame 问题答案: agg有两种版本(aggregate的缩写)和适用:第一个版本在groupby
本文向大家介绍call和apply的区别?相关面试题,主要包含被问及call和apply的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。 call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2
不是应该为['xiaomings',300]吗?
本文向大家介绍Android中@id和@+id及@android:id的区别介绍,包括了Android中@id和@+id及@android:id的区别介绍的使用技巧和注意事项,需要的朋友参考一下 前言 昨天突然有新来的同事问我这个@id 和@+id 的区别 ,为什么 我们的项目都是@id 自己新增的ui 使用的@+id 这里说下我的简单的回复项目是维护的之前的是为了统一管理使用了@id 方便修改
本文向大家介绍JS构造函数与原型prototype的区别介绍,包括了JS构造函数与原型prototype的区别介绍的使用技巧和注意事项,需要的朋友参考一下 构造函数方法很好用,但是存在一个浪费内存 通过原型法分配的函数是所有对象共享的. 通过原型法分配的属性是独立.-----如果你不修改属性,他们是共享 如果我们希望所有的对象使用同一一个函数,最好使用原型法添加函数,这样比较节省内存. 例子: /