一、背景:
项目中部分前端代码在谷歌浏览器可以正常访问,切换到IE浏览器后报错
二、报错:
const date = new Date(data.createdDate);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); //月份需要加1,且不足两位数的要补0
const day = String(date.getDate()).padStart(2, '0'); // 日要保证两位数,不足的也要补0
const formattedDate = `${year}-${month}-${day}`;
以上是报错信息,formattedDate 为199行代码
三、排查原因:(略过原因直接看解决方法的直接下一步)
在IE浏览器中,模板字面量(template literals)可能不被完全支持,特别是在较早的IE版本(如IE11及更早版本)。模板字面量是ES6引入的一项新特性,它允许我们使用
${}
来插入变量和表达式。
我们的代码块:
const formattedDate = `${year}-${month}-${day}`;
在IE中,可以通过使用传统的字符串拼接方式来实现相同的效果,即使用加号(+)连接字符串:
const formattedDate = year + '-' + month + '-' + day;
这种方法在所有主流浏览器中都能很好地运行,包括IE。这是因为字符串拼接是JavaScript的基本功能,几乎所有的浏览器都支持。
总结起来,为了在谷歌浏览器和较早的IE浏览器中都能够兼容,建议使用传统的字符串拼接方式而不是模板字面量。
四、解决
将199行代码修改为:
const formattedDate = year + '-' + (month < 10 ? '0' + month : month) + '-' + (day < 10 ? '0' + day : day);