今天发现一个有Javascript时间对像的一个有趣的问题:
时间对像+一个数字时,时间对像被转换成一个时间字符串,数字也被转换成一个字符串,+加相当于字符串连符:
let d = new Date(); //2019-11-20T12:39:09.521Z
console.log(d+86400*1000); //Wed Nov 20 2019 20:39:09 GMT+0800 (GMT+08:00)86400000
但减去一个数字时,时间对象会被转换成一个毫秒表示的UNIX时间戳,-号作为数学动算符与后面的数字做减法操作:
let d = new Date(); //2019-11-20T12:39:09.521Z
console.log(d-0); //1574253549521
console.log(d-'asdf'); //NaN
结论:
时间对象后边有+操作符时,+号优先被看作是字符串连接符,连接之前,解释器先调用时间对象的toString()方法,再与后边操作数进行字符串连接运算;
时间以象后边有-操作符并且右操作数是数字时(右操作数非数字时,结果为NaN),-号被看作是算术运算符,解释器先调用时间对象的getTime()方法,再与后边操作数进行减法数学运算