文章目錄
- 一、概述
- 二、顯示轉換
- Number()
- parseInt()
- String()
- Boolean()
- 三、隱式轉換
- 自動轉換為布爾值
- 自動轉換成字符串
- 自動轉換成數值
一、概述
前面我們講到,JS
中有六種簡單數據類型:undefined
、null
、boolean
、string
、number
、symbol
,以及引用類型:object
但是我們在聲明的時候只有一種數據類型,只有到運行期間才會確定當前類型
上面代碼中,x
的值在編譯階段是無法獲取的,只有等到程序運行時才能知道
雖然變量的數據類型是不確定的,但是各種運算符對數據類型是有要求的,如果運算子的類型與預期不符合,就會觸發類型轉換機制
常見的類型轉換有:
- 強制轉換(顯示轉換)
- 自動轉換(隱式轉換)
二、顯示轉換
顯示轉換,即我們很清楚可以看到這里發生了類型的轉變,常見的方法有:
- Number()
- parseInt()
- String()
- Boolean()
Number()
將任意類型的值轉化為數值
先給出類型轉換規則:
實踐一下:
Number(324) // 324// 字符串:如果可以被解析為數值,則轉換為相應的數值
Number('324') // 324// 字符串:如果不可以被解析為數值,返回 NaN
Number('324abc') // NaN// 空字符串轉為0
Number('') // 0// 布爾值:true 轉成 1,false 轉成 0
Number(true) // 1
Number(false) // 0// undefined:轉成 NaN
Number(undefined) // NaN// null:轉成0
Number(null) // 0// 對象:通常轉換成NaN(除了只包含單個數值的數組)
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
從上面可以看到,Number
轉換的時候是很嚴格的,只要有一個字符無法轉成數值,整個字符串就會被轉為NaN
parseInt()
parseInt
相比Number
,就沒那么嚴格了,parseInt
函數逐個解析字符,遇到不能轉換的字符就停下來
String()
可以將任意類型的值轉化成字符串
給出轉換規則圖:
實踐一下:
// 數值:轉為相應的字符串
String(1) // "1"//字符串:轉換后還是原來的值
String("a") // "a"//布爾值:true轉為字符串"true",false轉為字符串"false"
String(true) // "true"//undefined:轉為字符串"undefined"
String(undefined) // "undefined"//null:轉為字符串"null"
String(null) // "null"//對象
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
Boolean()
可以將任意類型的值轉為布爾值,轉換規則如下:
實踐一下:
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
三、隱式轉換
在隱式轉換中,我們可能最大的疑惑是 :何時發生隱式轉換?
我們這里可以歸納為兩種情況發生隱式轉換的場景:
- 比較運算(
==
、!=
、>
、<
)、if
、while
需要布爾值地方 - 算術運算(
+
、-
、*
、/
、%
)
除了上面的場景,還要求運算符兩邊的操作數不是同一類型
自動轉換為布爾值
在需要布爾值的地方,就會將非布爾值的參數自動轉為布爾值,系統內部會調用Boolean
函數
可以得出個小結:
- undefined
- null
- false
- +0
- -0
- NaN
- “”
除了上面幾種會被轉化成false
,其他都換被轉化成true
自動轉換成字符串
遇到預期為字符串的地方,就會將非字符串的值自動轉為字符串
具體規則是:先將復合類型的值轉為原始類型的值,再將原始類型的值轉為字符串
常發生在+
運算中,一旦存在字符串,則會進行字符串拼接操作
'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"
自動轉換成數值
除了+
有可能把運算子轉為字符串,其他運算符都會把運算子自動轉成數值
'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
null
轉為數值時,值為0
。undefined
轉為數值時,值為NaN