第一个示例
var arr1 = ['a', 'b'];
var arr2 = ['c', 'd'];
arr1.push.apply(arr1, arr2);
// arr1 is now ['a', 'b', 'c', 'd']
第二个例子
Math.max.apply(null, [-1, 5, 11, 3])
在上面的第一个中,我们可以直接使用array1.push(array2)
吗,有什么不同吗?
在上面的第二个中,空参数真的让我感到困惑,而且,似乎 max mehood 需要数字类型,而不是数组?
最佳答案
如果使用arr1.push(arr2)
,结果会不同:
['a', 'b', ['c', 'd']]
要获得与原始 arr1.push.apply
相同的结果,您必须这样做
arr1.concat(arr2);
apply
接受数组参数并将每个元素转换为被调用函数的单独参数。当您正常调用该函数时,该数组只是一个参数。
调用 Math.max
的正常方法是将每个数字作为单独的参数进行比较:
Math.max(-1, 5, 11, 3);
为了从数组中获取参数,您必须使用 apply
来传播它们。
在第二种情况下使用 null
参数的原因是因为 apply
的第一个参数是函数的上下文,即将在函数内分配给 this
的值。正常调用函数时,上下文就是.
之前的值;例如,当你写
arr1.push('x');
上下文是arr1
数组。 Math.max()
不使用其上下文,但您必须传递一些内容,因此 null
是一个常见的占位符。但是,当我们使用 apply
调用 push
时,我们必须传递 arr1
作为上下文,以便它知道要修改哪个数组。有些人喜欢写
Math.max.apply(Math, [-1, 5, 11, 3]);
这样上下文就和您以正常方式调用 Math.max
一样。但在这种情况下这并不重要。
关于javascript - 使用 Javascript math.max.apply(null 或 math..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075869/