项目中有关于页面回显默认账期的需求,格式为yyyy-mm,该方法使用过程中出现了一个关于数据类型的小坑,特此记录一下。
方法如下:
getDate() {
// 获取时间
const nowDate = new Date();
// 分别获取年、月
const date = {
year: nowDate.getFullYear(),
month: nowDate.getMonth() + 1,
};
// 月份为单数时十位显示0
const newMonth = date.month >= 10 ? date.month : "0" + date.month;
// 返回格式为yyyymm的年月
return date.year + newMonth;
}
出现的bug:当前月份为1-9月时没有出现任何问题,一旦当前月为10、11、12就会出现账期显示有误的问题。
原因:这里是因为数据类型变化导致返回值出现问题。
方法中调用的getFullYear()和getMonth()两个方法返回值为Number类型。代码执行到三目表达式时会出现以下两种情况:
1、当前月份为1~9月:则与字符串"0"拼接,这里会将date.month强制转换为String类型,在最后一步返回的时候再将date.year转换为String类型,返回拼接的字符串,账期正常回显。
2、当前月份为10~12月:直接将date.month赋值给newMonth,此时newMonth和date.year都是Number类型,会进行累加,返回一个累加的数字,而不是yyyymm格式的字符串。
解决办法:最后函数值返回的时候再做一次类型转换即可。例如:
return date.year + newmonth.toString();
return date.year + newmonth + '';