concat 返回值

为什么返回值是这个。

console.log([].concat.apply([],[1,2,[3,4,[5,6]]]))
//[1, 2, 3, 4,[5,6]]
阅读 2.8k
3 个回答

楼上正解 apply会将arr类型的参数转换为参数序列也就是说[1,2,[3,4,[5,6]]]其实不是要合并的数组,而是[1],[2],[3,4,[5,6]],这三个数组会依次合并

可以尝试一下把apply换成call 看一下输出的结果 就明白了 主要是apply这个方法的特殊性

先给你看看简单的例子,你了解下apply。

function add(a, b) {
  return a + b
}
add.apply(sub, [5, 3]); //8

上面的例子可以看出,apply的作用是把add(即this)绑定到sub,这时候sub具备了add的属性和方法add.apply(sub, [5, 3])等价于add(5, 3)。这里为什么是5, 3不是[5, 3]你可以了解下apply和call的区别。
同理,[].concat.apply([],[1,2,[3,4,[5,6]]])可以看成是
[]具备了[].concat的属性和方法,此时[].concat.apply([],[1,2,[3,4,[5,6]]])等价于[].concat(1,2,[3,4,[5,6]]).

[].concat(1,2,[3,4,[5,6]])的功能主要集中在concat上(可以参考http://www.w3school.com.cn/jsref/jsref_concat_array.asp),
concat函数中的参数可以是数组也可以是值,此处相当于[]拼接了两个**数值**1, 2和**数组**[3, 4, [5, 6]]
[]拼接1, 2 => [1, 2]
[1, 2]拼接[3, 4, [5, 6]] => [1, 2, 3, 4, [5, 6]

等价于
[].concat(1, 2, [3,4,[5,6]])

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题