Javascript 類型轉(zhuǎn)換

2023-02-17 10:37 更新

大多數(shù)情況下,運算符和函數(shù)會自動將賦予它們的值轉(zhuǎn)換為正確的類型。

比如,alert 會自動將任何值都轉(zhuǎn)換為字符串以進(jìn)行顯示。算術(shù)運算符會將值轉(zhuǎn)換為數(shù)字。

在某些情況下,我們需要將值顯式地轉(zhuǎn)換為我們期望的類型。

對象還未納入討論中

在本章中,我們不會討論 object 類型。目前,我們將只學(xué)習(xí)原始類型。

之后,在我們學(xué)習(xí)完 object 類型后,我們會在 對象 —— 原始值轉(zhuǎn)換 一章中學(xué)習(xí)對象 — 原始值轉(zhuǎn)換。

字符串轉(zhuǎn)換

當(dāng)我們需要一個字符串形式的值時,就會進(jìn)行字符串轉(zhuǎn)換。

比如,alert(value) 將 value 轉(zhuǎn)換為字符串類型,然后顯示這個值。

我們也可以顯式地調(diào)用 String(value) 來將 value 轉(zhuǎn)換為字符串類型:

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

value = String(value); // 現(xiàn)在,值是一個字符串形式的 "true"
alert(typeof value); // string

字符串轉(zhuǎn)換最明顯。false 變成 "false",null 變成 "null" 等。

數(shù)字型轉(zhuǎn)換

在算術(shù)函數(shù)和表達(dá)式中,會自動進(jìn)行 number 類型轉(zhuǎn)換。

比如,當(dāng)把除法 ?/? 用于非 number 類型:

alert( "6" / "2" ); // 3, string 類型的值被自動轉(zhuǎn)換成 number 類型后進(jìn)行計算

我們也可以使用 Number(value) 顯式地將這個 value 轉(zhuǎn)換為 number 類型。

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

let num = Number(str); // 變成 number 類型 123

alert(typeof num); // number

當(dāng)我們從 string 類型源(如文本表單)中讀取一個值,但期望輸入一個數(shù)字時,通常需要進(jìn)行顯式轉(zhuǎn)換。

如果該字符串不是一個有效的數(shù)字,轉(zhuǎn)換的結(jié)果會是 ?NaN?。例如:

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

alert(age); // NaN,轉(zhuǎn)換失敗

number 類型轉(zhuǎn)換規(guī)則:

變成……
undefined NaN
null 0
true 和 false 1 and 0
string 去掉首尾空白字符(空格、換行符 \n、制表符 \t 等)后的純數(shù)字字符串中含有的數(shù)字。如果剩余字符串為空,則轉(zhuǎn)換結(jié)果為 0。否則,將會從剩余字符串中“讀取”數(shù)字。當(dāng)類型轉(zhuǎn)換出現(xiàn) error 時返回 NaN

例子:

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN(從字符串“讀取”數(shù)字,讀到 "z" 時出現(xiàn)錯誤)
alert( Number(true) );        // 1
alert( Number(false) );       // 0

請注意 null 和 undefined 在這有點不同:null 變成數(shù)字 0,undefined 變成 NaN

大多數(shù)數(shù)學(xué)運算符也執(zhí)行這種轉(zhuǎn)換,我們將在下一節(jié)中進(jìn)行介紹。

布爾型轉(zhuǎn)換

布爾(boolean)類型轉(zhuǎn)換是最簡單的一個。

它發(fā)生在邏輯運算中(稍后我們將進(jìn)行條件判斷和其他類似的東西),但是也可以通過調(diào)用 Boolean(value) 顯式地進(jìn)行轉(zhuǎn)換。

轉(zhuǎn)換規(guī)則如下:

  • 直觀上為“空”的值(如 ?0?、空字符串、?null?、?undefined ?和 ?NaN?)將變?yōu)?nbsp;?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)

總結(jié)

有三種常用的類型轉(zhuǎn)換:轉(zhuǎn)換為 string 類型、轉(zhuǎn)換為 number 類型和轉(zhuǎn)換為 boolean 類型。

字符串轉(zhuǎn)換 —— 轉(zhuǎn)換發(fā)生在輸出內(nèi)容的時候,也可以通過 String(value) 進(jìn)行顯式轉(zhuǎn)換。原始類型值的 string 類型轉(zhuǎn)換通常是很明顯的。

數(shù)字型轉(zhuǎn)換 —— 轉(zhuǎn)換發(fā)生在進(jìn)行算術(shù)操作時,也可以通過 Number(value) 進(jìn)行顯式轉(zhuǎn)換。

數(shù)字型轉(zhuǎn)換遵循以下規(guī)則:

變成……
undefined NaN
null 0
true / false 1 / 0
string “按原樣讀取”字符串,兩端的空白字符(空格、換行符 \n、制表符 \t 等)會被忽略。空字符串變成 0。轉(zhuǎn)換出錯則輸出 NaN。

布爾型轉(zhuǎn)換 —— 轉(zhuǎn)換發(fā)生在進(jìn)行邏輯操作時,也可以通過 Boolean(value) 進(jìn)行顯式轉(zhuǎn)換。

布爾型轉(zhuǎn)換遵循以下規(guī)則:

變成……
0nullundefinedNaN"" false
其他值 true

上述的大多數(shù)規(guī)則都容易理解和記憶。人們通常會犯錯誤的值得注意的例子有以下幾個:

  • 對 ?undefined ?進(jìn)行數(shù)字型轉(zhuǎn)換時,輸出結(jié)果為 ?NaN?,而非 ?0?。
  • 對 ?"0"? 和只有空格的字符串(比如:?" "?)進(jìn)行布爾型轉(zhuǎn)換時,輸出結(jié)果為 ?true?。

我們在本小節(jié)沒有講 object 類型的轉(zhuǎn)換。在我們學(xué)習(xí)完更多關(guān)于 JavaScript 的基礎(chǔ)知識后,我們會在專門介紹 object 的章節(jié) 對象 —— 原始值轉(zhuǎn)換 中詳細(xì)講解 object 類型轉(zhuǎn)換。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號