Chrome 84调用replaceAll报is not a function错误如何解决
报错原因
这个报错和时区获取逻辑无关,完全是浏览器兼容性问题:String.prototype.replaceAll 是ES2021标准新增的字符串方法,Chrome浏览器从85版本才开始原生支持该API,你使用的Chrome 84版本的字符串原型链上不存在这个方法,调用时就会抛出replaceAll is not a function的错误。
修复方法
优先推荐无侵入的正则替换方案,兼容所有Chrome版本,不需要额外新增polyfill:
function GetHumanTimezone() { // 正则加g标记实现全局匹配,效果和replaceAll完全一致 return Intl.DateTimeFormat().resolvedOptions().timeZone.replace(/_/g, '-'); }
如果你有多处代码使用了replaceAll、不想逐处修改,可以在业务代码入口处统一添加polyfill,注意先做特性判断避免覆盖高版本浏览器的原生实现:
if (!String.prototype.replaceAll) { String.prototype.replaceAll = function (matchStr, replaceStr) { return this.replace(new RegExp(matchStr, 'g'), replaceStr); }; }
添加后你原来的GetHumanTimezone函数不需要任何修改就可以正常运行。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

