arr1.concat(arr2)和[] .concat(arr1,arr2)之间的区别

时间:2017-04-02 10:56:13

标签: javascript arrays performance concatenation concat

在JavaScript中,我遇到过以两种主要方式编写的代码,用于连接在.concat()对象上使用Array方法的两个(或更多)数组。 (假设,在下文中,arr1arr2是作为.concat()方法的参数给出的通用数组。有时,我看到

arr1.concat(arr2)

而在其他地方,我看到使用了以下内容:

[].concat(arr1, arr2)

在实践中,我没有发现两种表达方式之间存在任何可观察到的差异。都不会改变原始数组。两者都返回相同的输出。

有什么不同,如果有的话?是否比另一个表现更好?最佳实践是否特别建议一个人?

非常感谢所有帮助/反馈!

修改

JSPerf基准测试进行了分析。正如一些评论中所指出的那样,与arr1.concat(arr2)相比,[].concat(arr1, arr2)似乎是首选(和更自然的语法)。 (我想这有点主观,但回想起来大多数人会同意)。即便如此,如果没有其他原因,只要稍微提高它的性能,就可以选择以前的语法。

2 个答案:

答案 0 :(得分:1)

实际上,使用[].concat(arr1, arr2),默认设置结果必须是数组。你可以连接字符串和数组,或只是字符串或只有数组 - 结果将始终是一个数组。

如果您希望结果为string,请在开头使用空引号而不是空数组。



console.log([].concat([1,2,3], 'text'));
console.log([].concat('text', 'new'));
console.log(''.concat([1,2,3], [4,5,6]));




使用arr1.concat(arr2),第一个元素的类型 - 在本例中为arr1,将是新制作对象的默认类型。因此,如果arr1是字符串,即使arr2是数组 - 结果也是string的类型。



console.log([1,2,3].concat('text'));
console.log('text'.concat([1,2,3]));




在这两种情况下 - 原始数组或字符串都没有被改变。

关于表现 - 他们之间没有明显的差异。

答案 1 :(得分:1)

如果arr1arr2都是普通数组,那么绝对没有区别。它只是两个相同的符号,一个是面向对象的,另一个是更具功能性的。有人可能会说[].concat(…)效率较低,因为它必须构造并迭代一个空数组,但这几乎不可测量。

虽然arr1 Array,但可以观察到差异。显然,它可能会调用不同的concat方法,甚至在没有方法时抛出(或者当arr1nullundefined时抛出);但是当它调用Array.prototype.concat方法时,arr1也不会checked for being spreadable