[JavaScriptWeird]No.16 強制型轉

前言

我們提到 JavaScript 宣告變數時不需要指定型別,因為 JavaScript 是動態型別語言,這篇文章要記錄的觀念是「強制型轉 (coercion)

強制型轉 (coercion)

強制型轉的意思就如同字面上解釋,強制轉換一個值的型別。
舉例來說:有個數值型別,然後要轉換成字串型別,這在 JavaScript 是很容易發生的,因為動態型別的關係。
例一:

1
2
3
var a = 1 + 2;  
console.log(a); // 3
console.log(typeof(a)); // Number

例二:

1
2
3
var a = '1' + '2';  
console.log(a); // 12
console.log(typeof(a)); // String

這兩個例子都用到了先前提到的運算子「+」,這是一個函式,處理後回傳了一個值。像是例一,我們傳入了兩個數字給加號運算子,它便進行加法的運算 ; 例二則是傳入字串 1 以及 字串 2 ,回傳了字串 12,兩個字串被連接了。

如果傳入一個字串跟一個數字呢?

1
2
3
var a = '1' + 2;  
console.log(a); // 12
console.log(typeof(a)); // String

前面提到, JavaScript 是動態型別的程式語言。注意我們並沒有輸入任何程式碼進行轉型,一般而言,字串和數字是無法直接相加的。但我們第一個傳入的參數卻被 JavaScript 強制型轉成字串,而不是得到一個 Error 。

JavaScript 在處理這一段的時候,有個規則,當「數值」與「字串」做相加時,數值的部分會被強制型轉成為字串,以本例來說輸出結果為字串 12 。

另外如果是這樣寫:

1
2
3
var a = '' + 2;  
console.log(a); // 2
console.log(typeof(a)); // String

雖然字串內沒有寫任何東西,出來的結果也是預期的 2 ,但實際上這邊的 2 是字串 2 ,如果繼續與其他數值計算可能發生預期之外的結果,因此了解強制型轉的概念是相當重要的。

0%