在JavaScript中,我遇到了以两种主要方式编写的代码,用于连接在Array对象上使用.concat()方法的两个(或更多)数组。(下面假设arr1和arr2是作为.concat()方法的参数提供的泛型数组)。有时,我看到
arr1.concat(arr2)而在另一些情况下,我看到使用了以下方法:
[].concat(arr1, arr2)实际上,我没有发现这两种表达方式之间有什么明显的差别。两种方法都不改变原始数组。两者都返回相同的输出。
如果有什么不同,有什么不同吗?一个比另一个更好吗?最佳实践是否有特别的建议?
非常感谢大家的帮助/反馈!
编辑
对JSPerf基准测试大声疾呼。正如一些人在评论中所指出的,与[].concat(arr1, arr2)相比,[].concat(arr1, arr2)似乎是首选的语法(也是更自然的语法)。(我认为这有点主观,但回想起来,我觉得大多数人都会同意)。即便如此,如果没有其他原因,选择前者的语法比后者更有价值,那就是它带来的性能略有提高。
发布于 2017-04-02 11:08:04
实际上,使用[].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]));
在这两种情况下--原始数组或字符串不会发生变异。
关于表现--他们之间没有明显的差别。
发布于 2017-04-02 12:15:17
如果arr1和arr2都是普通数组,则绝对没有区别。它仅仅是同一事物的两个符号,一个是面向对象的,另一个是功能更强的。有人可能会说,[].concat(…)效率较低,因为它必须构造和迭代一个空数组,但这不应该是可测量的。
但是,当arr1不是Array时,差别是可以观察到的。显然,它可能会调用不同的concat方法,甚至在没有(或者arr1是null或undefined)时抛出;但是当它调用Array.prototype.concat方法时,arr1也不会是检查是否可扩展。
https://stackoverflow.com/questions/43167478
复制相似问题