2023 年 1 月 24 日

類型轉換

大部分時候,運算子與函式會自動將給定的值轉換成正確的類型。

例如,alert 會自動將任何值轉換成字串以顯示。數學運算會將值轉換成數字。

有些情況下,我們需要明確地將值轉換成預期的類型。

目前不討論物件

在本章中,我們不會介紹物件。目前,我們只會討論基本型別。

稍後,在我們學習物件之後,在章節 物件轉換為原始型別 中,我們將會看到物件如何運作。

字串轉換

當我們需要某個值的字串形式時,就會發生字串轉換。

例如,alert(value) 會執行此動作以顯示值。

我們也可以呼叫 String(value) 函式,將值轉換為字串

let value = true;
alert(typeof value); // boolean

value = String(value); // now value is a string "true"
alert(typeof value); // string

字串轉換大多很明顯。false 會變成 "false"null 會變成 "null",等等。

數字轉換

在數學函式和表達式中,數字轉換會自動發生。

例如,當除法 / 套用於非數字時

alert( "6" / "2" ); // 3, strings are converted to numbers

我們可以使用 Number(value) 函式,明確地將 value 轉換為數字

let str = "123";
alert(typeof str); // string

let num = Number(str); // becomes a number 123

alert(typeof num); // number

當我們從基於字串的來源(例如文字表單)讀取值,但預期輸入數字時,通常需要明確轉換。

如果字串不是有效的數字,則此類轉換的結果為 NaN。例如

let age = Number("an arbitrary string instead of a number");

alert(age); // NaN, conversion failed

數字轉換規則

變成...
undefined NaN
null 0
true 和 false 10
字串 移除開頭和結尾的空白(包括空格、跳格 \t、換行 \n 等)。如果剩下的字串為空,則結果為 0。否則,會從字串中「讀取」數字。錯誤會產生 NaN

範例

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (error reading a number at "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

請注意,nullundefined 在這裡的行為不同:null 變成 0,而 undefined 變成 NaN

大多數數學運算子也會執行此類轉換,我們將在下一章中看到。

布林轉換

布林轉換是最簡單的。

它發生在邏輯運算中(稍後我們會遇到條件測試和其他類似的事物),但也可以透過呼叫 Boolean(value) 明確執行。

轉換規則

  • 直覺上「為空」的值,例如 0、空字串、nullundefinedNaN,會變成 false
  • 其他值會變成 true

例如

alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
請注意:字串為零 "0"true

某些語言(例如 PHP)將 "0" 視為 false。但在 JavaScript 中,非空字串永遠為 true

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)

摘要

最廣泛使用的三種型別轉換為字串、數字和布林值。

字串轉換 – 發生在我們輸出某個內容時。可以使用 String(value) 執行。對於基本值,轉換為字串通常很明顯。

數字轉換 – 發生在數學運算中。可以使用 Number(value) 執行。

轉換遵循以下規則

變成...
undefined NaN
null 0
true / false 1 / 0
字串 字串以「原樣」讀取,兩側的空白(包括空格、製表符 \t、換行符 \n 等)都會被忽略。空字串會變成 0。錯誤會產生 NaN

布林值轉換 – 發生在邏輯運算中。可以使用 Boolean(value) 執行。

遵循以下規則

變成...
0nullundefinedNaN"" false
任何其他值 true

這些規則大多容易理解和記憶。人們通常會犯錯的顯著例外情況有

  • undefined 作為數字時為 NaN,而不是 0
  • "0" 和僅包含空格的字串(如 " ")作為布林值時為 true。

物件在此未涵蓋。我們會在章節 物件轉換為基本型別 中稍後再回顧物件,在我們瞭解更多有關 JavaScript 的基本事項後,該章節專門探討物件。

教學課程地圖

留言

留言前請先閱讀…
  • 如果您有改善建議,請 提交 GitHub 問題 或發起 pull 請求,而不是留言。
  • 如果您無法理解文章中的某個部分,請詳細說明。
  • 若要插入幾行程式碼,請使用 <code> 標籤,若要插入多行,請將其包覆在 <pre> 標籤中,若要插入超過 10 行,請使用沙盒(plnkrjsbincodepen…)