JavaScript中split+join与replace函数的性能对比(2018年5月)
字符串空格替换:split+join vs replace 性能对比(2018年5月版)
这个问题问得太戳痛点了——以前查的性能测试过不了多久就过时,毕竟浏览器引擎的优化速度真的快。我专门针对2018年5月的主流浏览器(Chrome 66、Firefox 60、Safari 11.1这些当时的新版本)做了测试,给你说说结果:
首先再明确下两种实现的代码:
- split+join写法:
let string = 'Hello World'; let newString = string.split(' ').join('_'); // 结果: Hello_World
- 正则replace写法:
let string = 'Hello World'; let newString = string.replace(/ /g,"_"); // 结果: Hello_World
从可读性来说,两者确实都很直观,不用费脑子就能看懂。但说到2018年5月的执行速度,结论很明确:全局正则replace的表现要优于split+join。
为啥会这样?核心在于两者的执行逻辑:
split(' ')会先把原字符串按空格拆分成一个数组,然后join('_')再遍历这个数组,把元素用下划线拼接成新字符串——中间多了数组的创建、存储和销毁步骤,相当于做了两次字符串遍历+一次数组操作。- 而
replace(/ /g, "_")是浏览器引擎原生实现的字符串全局替换,直接在字符串层面完成匹配和替换,没有中间数组的额外开销,执行路径更短。
而且这种差异在处理包含大量空格的长字符串时会更明显;如果只是短字符串、少量空格,两者的性能差距可能小到可以忽略,这时候选哪个就全看个人习惯了。
当然也要说句实在的:如果你的代码不是在处理百万级别的字符串批量操作,其实这点性能差异对用户体验几乎没影响,可读性反而应该放在第一位。但要是涉及到性能敏感的场景,2018年的新版浏览器里,replace确实是更高效的选择。
内容的提问来源于stack exchange,提问作者Dennis Spierenburg
相关产品推荐
相关产品推荐

