为什么[] .concat()和Array.prototype.concat.apply([],[array])输出不同

2,025 阅读1分钟

下面代码

[].concat([2,[3,4]])

输出

Array.prototype.concat.apply([],[2,[3,4]])

输出

解析其运行的逻辑

apply语法

func.apply(thisArg, [argsArray])

thisArg 在 func 函数运行时使用的 this 值,即当前的执行环境。请注意,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。

argsArray 一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。如果该参数的值为 null 或 undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象

所以实际上相当于执行了以下代码

[].concat(2, [3, 4])

它们的共同点是执行结果返回一个新的数组,并不会修改原来的数组