ECMAScript 2021添加了一个新的字符串函数
我创建了下面的例子来比较新方法和旧方法。虽然在第一种情况下我能看到一些差异,例如我不能使用替换模式与
新方法和旧方法之间有哪些差异(行为差异、性能、浏览器兼容性等)?
replaceAll
。很久以前,在一个不太遥远的星系里,人们使用split
+join
或正则表达式来替换字符串的所有出现。我创建了下面的例子来比较新方法和旧方法。虽然在第一种情况下我能看到一些差异,例如我不能使用替换模式与
split
+join
,或者我需要用RegExp(str,"g")
转义特殊字符,但我在第二种情况下看不到任何差异。新方法和旧方法之间有哪些差异(行为差异、性能、浏览器兼容性等)?
const source = "abcdefabcdef";
const str1 = "abc", str2 = "xyz";
const reg1 = /abc/g, reg2 = "xyz";
//Case 1 : When we want to replace a string by another
console.log(source.split(str1).join(str2));
console.log(source.replace(new RegExp(str1,"g"),str2));
//versus
console.log(source.replaceAll(str1,str2));
//Case 2 : When we want to use a regular expression
console.log(source.replace(reg1,reg2));
//versus
console.log(source.replaceAll(reg1,reg2));
//Result = "xyzdefxyzdef"
g
标志的错误而添加的(也就是一个真正的运行时错误,而不是当代码运行时可能存在或不存在的逻辑错误)。浏览器支持情况请参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll#browser_compatibility 。与带有g
标志的正则表达式的replace
方法相比,它更加明确。 - Felix Kling