在JavaScript中,有類型轉換(type conversion)以及類型強制(type coercion)。
const age = "17";
但當我們想使用這些資料來做計算時,例如要算出這個使用者23年後是幾歲?結果可能出乎我們意料,因為如同前幾篇文章內容提到的,加號運算子除了拿來運算,也可以用來連接字串,所以結果會變成下面這個字串:
console.log(age + 23);
// 1723
所以我們需要將類型從字串轉換成數字,方法就是使用內建的數字函數:
console.log(Number(age) + 23);
// 40
需要注意的是,age這個變數的值的類型實際上並不會因為使用了數字函數而改變,也就是說age這個變數的值仍然是一個字串。
如果我們試圖用數字函數去轉換一個不可能變成數字的字串,結果會變成NaN,意思是not a number。
console.log(Number("Alex"));
// NaN
但如果我們檢查NaN的類型,會發現NaN其實是一個number,這可能蠻令人困惑的,但基本上NaN就是一個無效的數字(invalid number)。
console.log(typeof NaN);
// number
當然JavaScript還有其他的類型轉換函數,可以將類型轉換成字串或是布林值,但我們無法將某個東西轉換成undefined或null。
我們拿前面的例子來說,要算出使用者的出生年份,我們可以這麼做:
console.log(2022 - age);
// 2005
我們並沒有將age的類型轉換成數字,但卻可以得到正確的結果,這是因為JavaScript自動將類型從字串轉換成了數字的緣故。