Edge浏览器中toLocaleString使用'default' locale报错的解决方法求助
解决旧版Edge中
toLocaleString('default')报错的问题 这个问题出在旧版Edge(EdgeHTML内核,比如你提到的41.16299.1004.0版本)对'default'这个locale标识符的解析存在兼容性bug——虽然MDN标注了该方法的支持性,但实际老版本Edge无法正确识别'default'参数,从而抛出SCRIPT5121错误。下面提供两种可行的解决方案:
方案1:修复原代码的locale参数
直接去掉显式的'default'参数,改用默认值(不传第一个参数或传undefined)。因为toLocaleString的第一个参数默认就是当前环境的默认locale,效果和你想传'default'完全一致,但能避开老Edge的bug:
const date = new Date(dateValue); // 方法A:省略第一个参数,直接传配置对象 const month = date.toLocaleString({ month: 'short' }); // 方法B:传入undefined作为第一个参数 const month = date.toLocaleString(undefined, { month: 'short' });
修改后既能保留原本获取当前locale月份缩写的功能,又能在旧版Edge中正常运行。
方案2:手动映射月份缩写(兼容性最强)
如果你的业务只需要固定的英文月份缩写(比如Jan/Feb这类mmm格式),可以直接维护一个月份缩写数组,通过getMonth()获取索引来取值。这种方法完全不依赖toLocaleString,兼容性覆盖所有浏览器:
// 按0-11的顺序对应1-12月的英文缩写 const monthAbbrs = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; const date = new Date(dateValue); const month = monthAbbrs[date.getMonth()];
如果需要支持多语言,你可以扩展这个数组为多语言对象,根据当前locale选择对应的缩写数组即可。
内容的提问来源于stack exchange,提问作者Souvik Ghosh
相关产品推荐
相关产品推荐

