首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >( arr2)与[].concat(arr1,arr2)的差异

( arr2)与[].concat(arr1,arr2)的差异
EN

Stack Overflow用户
提问于 2017-04-02 10:56:13
回答 2查看 424关注 0票数 0

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

代码语言:javascript
复制
arr1.concat(arr2)

而在另一些情况下,我看到使用了以下方法:

代码语言:javascript
复制
[].concat(arr1, arr2)

实际上,我没有发现这两种表达方式之间有什么明显的差别。两种方法都不改变原始数组。两者都返回相同的输出。

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

非常感谢大家的帮助/反馈!

编辑

JSPerf基准测试大声疾呼。正如一些人在评论中所指出的,与[].concat(arr1, arr2)相比,[].concat(arr1, arr2)似乎是首选的语法(也是更自然的语法)。(我认为这有点主观,但回想起来,我觉得大多数人都会同意)。即便如此,如果没有其他原因,选择前者的语法比后者更有价值,那就是它带来的性能略有提高。

EN

回答 2

Stack Overflow用户

发布于 2017-04-02 11:08:04

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

如果您希望结果是一个string --在开头使用空引号而不是空数组。

代码语言:javascript
复制
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类型。

代码语言:javascript
复制
console.log([1,2,3].concat('text'));
console.log('text'.concat([1,2,3]));

在这两种情况下--原始数组或字符串不会发生变异。

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

票数 1
EN

Stack Overflow用户

发布于 2017-04-02 12:15:17

如果arr1arr2都是普通数组,则绝对没有区别。它仅仅是同一事物的两个符号,一个是面向对象的,另一个是功能更强的。有人可能会说,[].concat(…)效率较低,因为它必须构造和迭代一个空数组,但这不应该是可测量的。

但是,当arr1不是Array时,差别是可以观察到的。显然,它可能会调用不同的concat方法,甚至在没有(或者arr1nullundefined)时抛出;但是当它调用Array.prototype.concat方法时,arr1也不会是检查是否可扩展

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43167478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档