let arr1 = [1, 2];
let arr2 = [3, 4];
// concat
arr1 = arr1.concat(arr2);
// 扩展运算符
arr1 = [...arr1, ...arr2];
// 或者
arr1.push(...arr2);
哪种更好,为什么?性能?
let arr1 = [1, 2];
let arr2 = [3, 4];
// concat
arr1 = arr1.concat(arr2);
// 扩展运算符
arr1 = [...arr1, ...arr2];
// 或者
arr1.push(...arr2);
哪种更好,为什么?性能?
先看下你说的这三种方式的差别:
这个差别的话存在俩中环境中:
你用babel转成es5看看扩展运算符
[...arr1, ...arr2] ==> [].concat(arr1, arr2)
arr1.push(...arr2) ==> arr1.push.apply(arr1, arr2)
这种差别的情况下可以看到,
好处:扩展运算符看起来更直观,可读性更好,调用的api更少,简洁。
性能:可能需要你做一下评估,我没做这个,
好处: 大家都用这个,提升你在其他前端心中的形象,你是一个与时俱进的人,不会被淘汰。。。
性能: 找支持这个语法的环境去测一下,比如node环境
另外说一下,性能的话,你也可以通过一些常用的比较方法来判断。
比如可以通过对一个数组连接10000万个元素看看不同方式花费的时间,去评估一下;
这个事情你自己可以做一下。
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
究竟用哪种还是得根据你实际需求来的
concat
是es5
时就有的,优点是兼容性
高,不需要转译...
是es6
新出的语法,简化
了写法,代码看上去更简洁直观,但实际只是做了封装
,底层还是用的原来的方法,如下为babel转译的结果第二种写法
第三种写法
再来看三种写法处理不同数据量的时间(数据分别为1,10,100) 单位:万
总结:
concat
性能最优在数据量极小时三者差异并不大
在数据有一定量时
concat
性能遥遥领先于arr1 = [...arr1, ...arr2]
和arr1.push(...arr2)
在数据过大时第三种方法会因为
apply
的特点由于数据量过大导致堆栈溢出