[x,y,z].join('')对于字符串来说真的比x+y+z更快吗?

7

[x,y,z].join('')相比于x + y + z在字符串拼接时是否真的更快?

我曾经认为使用join()会更快,因此我开始修改我的代码以使用它而不是+,但后来我在Google Analytics代码中遇到了以下行:

    ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

假设Google的程序员是最有知识的,这让我感到好奇。当然,那行代码每次页面加载只会运行一次,也可以说任何速度差异都是微不足道的。但还是让人想啊?

1
函数的速度取决于JavaScript实现,这在不同浏览器之间有所不同。进行测试 - http://jsperf.com/ - Bakudan
1
这也可以写成 [x,y].join('')。我相信节省的是在更多参数的情况下(因为您使用 + 每个追加都需要一次调用,而 join 只需要一个函数调用)。 - Hogan
+Bakudan,我找到了一个应该能够解决问题的测试:http://jsperf.com/concat-vs-join2/4 - TJR
3个回答

6

数组 .join() 方法(技巧)用于连接字符串,它的根源可以追溯到当时网站运行在像Internet Explorer这样的浏览器上。对于IE6 + 7而言,.join() 比使用 + 运算符要快得多,因为IE在字符串操作方面的行为非常糟糕。

对于其他浏览器而言,性能差异并不是那么大,因此建议使用 .join() (同样是在那个时候)。现在,大多数引擎都会对字符串操作进行优化,除非你认为你的代码经常在IE6+7中运行,否则应该只使用 +


2
在Firefox 6.0.2中,使用以下代码可以在Firebug控制台中进行操作:
b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = "sfhfdshdshsdh" + "sfhsfdhsfhdsfh" + "shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh";} c = new Date().getTime(); d = c - b;

并且

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = ["sfhfdshdshsdh","sfhsfdhsfhdsfh","shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh"].join();} c = new Date().getTime(); d = c - b;

我在"+"运算符的计算中平均只有40多,而在"join"方法的计算中则是50多,所以"join"方法似乎比较慢。这可能是因为"join"方法需要创建一个数组。此外,这个结果在不同浏览器和解释器中可能会有所不同。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接