iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
自我挑戰組

30天JavaScript自學挑戰系列 第 11

Day 11 Type Conversion與Type Coercion

  • 分享至 

  • xImage
  •  

在JavaScript中,有類型轉換(type conversion)以及類型強制(type coercion)。

  • Type conversion是指我們手動將一種類型轉換成另一種類型,舉例來說,當我們在網站上讓使用者輸入他們的年齡,這些來自使用者所輸入的資料,通常都是以字串的形式來表現:
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。

  • Type coercion則是指JavaScript會自動為我們轉換類型,在實際撰寫JavaScript時,相較於type conversion,這反而是比較常見的。

我們拿前面的例子來說,要算出使用者的出生年份,我們可以這麼做:

console.log(2022 - age);
// 2005

我們並沒有將age的類型轉換成數字,但卻可以得到正確的結果,這是因為JavaScript自動將類型從字串轉換成了數字的緣故。


上一篇
Day 10 if / else 陳述式
下一篇
Day 12 Truthy Value 和 Falsy Value
系列文
30天JavaScript自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言