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
都不用绕弯了 =。=
我是一只酸菜鱼,又酸又菜又多余~~~