大部分時候,運算子與函式會自動將給定的值轉換成正確的類型。
例如,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 |
1 和 0 |
字串 |
移除開頭和結尾的空白(包括空格、跳格 \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
請注意,null 和 undefined 在這裡的行為不同:null 變成 0,而 undefined 變成 NaN。
大多數數學運算子也會執行此類轉換,我們將在下一章中看到。
布林轉換
布林轉換是最簡單的。
它發生在邏輯運算中(稍後我們會遇到條件測試和其他類似的事物),但也可以透過呼叫 Boolean(value) 明確執行。
轉換規則
- 直覺上「為空」的值,例如
0、空字串、null、undefined和NaN,會變成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) 執行。
遵循以下規則
| 值 | 變成... |
|---|---|
0、null、undefined、NaN、"" |
false |
| 任何其他值 | true |
這些規則大多容易理解和記憶。人們通常會犯錯的顯著例外情況有
undefined作為數字時為NaN,而不是0。"0"和僅包含空格的字串(如" ")作為布林值時為 true。
物件在此未涵蓋。我們會在章節 物件轉換為基本型別 中稍後再回顧物件,在我們瞭解更多有關 JavaScript 的基本事項後,該章節專門探討物件。
留言
<code>標籤,若要插入多行,請將其包覆在<pre>標籤中,若要插入超過 10 行,請使用沙盒(plnkr、jsbin、codepen…)