[].concat(arr) 和 Array.prototype.concat.apply([], arr)有区别吗?
来源:18-12 面试讲解-11:数组去重有几种方式?

Brannua
2020-05-04
- 老师好~
- 我尝试使用[].concat(arr)拍平数组,结果栈溢出
- Array.prototype.concat.apply([], arr) 是可以正常拍平数组的
- 这两种写法有区别吗?
写回答
3回答
-
双越
2020-05-05
这俩结果完全就不一样。
Array.prototype.concat.apply([], [10, [100,200]]) // [10, 100, 200] [].concat([10, [100,200]]) // [10, [100,200]]
172020-05-12 -
Brannua
提问者
2020-05-05
- 老师我明白apply是改变this指向,下面这种写法会报错栈溢出,但是```[].concat.apply([], arr)```是好用的,问题是```[].concat(arr)```这样写,concat是```[]```调用的,那this本身不就应该指向```[]```了吗,为什么还要用apply再让this指向[]
```js
function flat(arr) {
const isDeep = arr.some(item => item instanceof Array)
if (!isDeep) {
return arr
}
// const res = Array.prototype.concat.apply([], arr)
const res = [].concat(arr)
return flat(res)
}
```
00 -
双越
2020-05-04
把你报错的代码发出来,我看下。
00
相似问题
伪元素双冒号,伪类单冒号
回答 2
arguments转数组
回答 2