繁花似锦觅安宁,淡云流水度此生。
缘深缘浅随它去,花开花落总归尘。

Math.max.apply(Math, [...]) 和 直接使用Math.max()的区别

作为菜鸡界的copy战士,首要特点就是:懒!

内置函数那么多,方法那么多,真的不可能一个一个去记吧,比如求最大值最小值(也许你会杠这不是最简单用到最多的api吗!但是,我就是记不住略略略=。=)

搜js求最大值最小值,也许出现最多的答案是:

let arr = [9, 1, 1, 8, 3]
Math.max.apply(Math, arr) // 求最大值
Math.min.apply(Math, arr) // 求最小值

通常情况下 copy就是了,但是如果不明白appy的用法的人,第一件事就是懵逼,这是个什么,为什么要这样!

用上面的例子简单翻译一下apply的意思:将Math.max函数作为对象Math的方法来使用,arr作为参数传给Math.max函数(参数必须是数组)。

这时候有人会纳闷了,我直接使用不好吗,为什么还要apply一下

Math.max([9, 1, 1, 8, 3]) 
// 然后惊讶的发现,结果NaN了

因为:Math.max方法希望得到的参数是分开的而不是一个数组同志们!

Math.max(9, 1, 1, 8, 3)  // 9

而用apply方法正好解决了这个问题,因为apply方法接收两个参数,

第一个参数: 对象

第二个参数:数组

并将数组中的元素依次拆分传递给调用的方法,所以

Math.max.apply(Math, [9, 1, 1, 3])
//等同于
Math.max(9, 1, 1, 3)

所以实际上,用apply方法只是为了解决参数的问题哦,并没有什么特殊的含义~

 

最后,其实可以用ES6的扩展运算符   '...' 啊同志们!

Math.max(...[9, 1, 1, 3])  // 9

都不用绕弯了 =。=

 

posted @ 2021-09-18 11:00  良人非良  阅读(415)  评论(0编辑  收藏  举报