大多數情況下,運算符和函數會自動將賦予它們的值轉換爲正確的類型。
比如,alert
會自動將任何值都轉換爲字符串以進行顯示。算術運算符會將值轉換爲數字。
在某些情況下,我們需要將值顯式地轉換爲我們期望的類型。
對象還未納入討論中
在本章中,我們不會討論 object 類型。目前,我們將只學習原始類型。
之後,在我們學習完 object 類型後,我們會在 對象 —— 原始值轉換 壹章中學習對象 — 原始值轉換。
當我們需要壹個字符串形式的值時,就會進行字符串轉換。
比如,alert(value)
將 value
轉換爲字符串類型,然後顯示這個值。
我們也可以顯式地調用 String(value)
來將 value
轉換爲字符串類型:
let value = true; alert(typeof value); // boolean value = String(value); // 現在,值是壹個字符串形式的 "true" alert(typeof value); // string
字符串轉換最明顯。false
變成 "false"
,null
變成 "null"
等。
在算術函數和表達式中,會自動進行 number 類型轉換。
比如,當把除法 /
用于非 number 類型:
alert( "6" / "2" ); // 3, string 類型的值被自動轉換成 number 類型後進行計算
我們也可以使用 Number(value)
顯式地將這個 value
轉換爲 number 類型。
let str = "123"; alert(typeof str); // string let num = Number(str); // 變成 number 類型 123 alert(typeof num); // number
當我們從 string 類型源(如文本表單)中讀取壹個值,但期望輸入壹個數字時,通常需要進行顯式轉換。
如果該字符串不是壹個有效的數字,轉換的結果會是 NaN
。例如:
let age = Number("an arbitrary string instead of a number"); alert(age); // NaN,轉換失敗
number 類型轉換規則:
值 | 變成…… |
---|---|
undefined | NaN |
null | 0 |
true 和 false | 1 and 0 |
string | 去掉首尾空白字符(空格、換行符 n 、制表符 t 等)後的純數字字符串中含有的數字。如果剩余字符串爲空,則轉換結果爲 0 。否則,將會從剩余字符串中“讀取”數字。當類型轉換出現 error 時返回 NaN 。 |
例子:
alert( Number(" 123 ") ); // 123 alert( Number("123z") ); // NaN(從字符串“讀取”數字,讀到 "z" 時出現錯誤) alert( Number(true) ); // 1 alert( Number(false) ); // 0
請注意 null
和 undefined
在這有點不同:null
變成數字 0
,undefined
變成 NaN
。
大多數數學運算符都執行這種轉換,我們將在下壹節中進行介紹。
布爾(boolean)類型轉換是最簡單的壹個。
它發生在邏輯運算中(稍後我們將進行條件判斷和其他類似的東西),但是也可以通過調用 Boolean(value) 顯式地進行轉換。
轉換規則如下:
直觀上爲“空”的值(如 0
、空字符串、null
、undefined
和 NaN
)將變爲 false
。
其他值變成 true
。
比如:
alert( Boolean(1) ); // true alert( Boolean(0) ); // false alert( Boolean("hello") ); // true alert( Boolean("") ); // false
請注意:包含 0 的字符串 "0"
是 true
壹些編程語言(比如 PHP)視 "0"
爲 false
。但在 JavaScript 中,非空的字符串總是 true
。
alert( Boolean("0") ); // true alert( Boolean(" ") ); // 空格,也是 true(任何非空字符串都是 true)
有三種常用的類型轉換:轉換爲 string 類型、轉換爲 number 類型和轉換爲 boolean 類型。
字符串轉換 —— 轉換發生在輸出內容的時候,也可以通過 String(value)
進行顯式轉換。原始類型值的 string 類型轉換通常是很明顯的。
數字型轉換 —— 轉換發生在進行算術操作時,也可以通過 Number(value)
進行顯式轉換。
數字型轉換遵循以下規則:
值 | 變成…… |
---|---|
undefined | NaN |
null | 0 |
true / false | 1 / 0 |
string | “按原樣讀取”字符串,兩端的空白字符(空格、換行符 n 、制表符 t 等)會被忽略。空字符串變成 0 。轉換出錯則輸出 NaN 。 |
布爾型轉換 —— 轉換發生在進行邏輯操作時,也可以通過 Boolean(value)
進行顯式轉換。
布爾型轉換遵循以下規則:
值 | 變成…… |
---|---|
0 , null , undefined , NaN , "" | false |
其他值 | true |
上述的大多數規則都容易理解和記憶。人們通常會犯錯誤的值得注意的例子有以下幾個:
對 undefined
進行數字型轉換時,輸出結果爲 NaN
,而非 0
。
對 "0"
和只有空格的字符串(比如:" "
)進行布爾型轉換時,輸出結果爲 true
。
我們在本小節沒有講 object 類型的轉換。在我們學習完更多關于 JavaScript 的基礎知識後,我們會在專門介紹 object 的章節 對象 —— 原始值轉換 中詳細講解 object 類型轉換。