今天發現一個有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()方法,再與後邊操作數進行減法數學運算