一、前言
上一篇學(xué)習(xí)了JavaScript的七種數(shù)據(jù)類型,那么這些類型之間的可以相互轉(zhuǎn)換?轉(zhuǎn)換的方法有哪些?
下面總結(jié)
二、類型轉(zhuǎn)換
JavaScript 作為一門弱類型語(yǔ)言,類型轉(zhuǎn)換是其中一個(gè)重要的語(yǔ)言特性,勢(shì)必需要掌握。
1. 附上JS 類型轉(zhuǎn)換一覽表

2. 轉(zhuǎn)為 number 類型
1)使用 Number(xxx) 函數(shù)
Number('1024') // 1024
Number('2.3') // 2.3
Number('1s024') // NaN
Number('0b100') // 4
Number('0x59') // 89
Number('0o23') // 19
Number('true') // NaN
Number(true) // 1
Number(false) // 0
Number(null) // 0
Number('null') // NaN
Number(undefined) // NaN
Number() // 0
Number('') // 0
Number(' ') // 0
Number(' 23') // 23(會(huì)忽略字符串開(kāi)頭和結(jié)尾的空格)等價(jià)于 Number('23')
① 傳入?yún)?shù) xxx 的值可以是 字符串、布爾值、null
② 字符串轉(zhuǎn)為數(shù)字,字符串中的內(nèi)容可以是不同進(jìn)制的格式(以0b 或 0x 或 0o 或 0B 或 0X 或 0O 開(kāi)頭的合法數(shù)字)
③ 當(dāng) Number(xxx) 轉(zhuǎn)換失敗時(shí),則返回NaN(表示非數(shù)字)
④ 當(dāng)n為空串或全是空格的字符串 或 null 或 false時(shí),Number(n) 轉(zhuǎn)換后為 0
2)parseInt(string, radix) —— 將字符串轉(zhuǎn)為整數(shù)
parseInt('10.24', 10) // 10
parseInt('0x59') // 0
parseInt('100', 2) // 4
parseInt('100', 5) // 25
parseInt('10.24e3', 10) // 10
parseInt('1024e3', 10) // 1024
parseInt(true) // NaN
parseInt(null) // NaN
parseInt() // NaN
parseInt(' ') // NaN(會(huì)忽略字符串開(kāi)頭和結(jié)尾的空格)等價(jià)于 parseInt('')
① 第一個(gè)參數(shù)為字符串,非字符串會(huì)自動(dòng)轉(zhuǎn)為字符串;第二個(gè)參數(shù) radix 表示第一個(gè)參數(shù)字符串是幾進(jìn)制的格式,即進(jìn)制的基數(shù),為一個(gè)介于2和36之間的整數(shù),ES5規(guī)定默認(rèn)為10(最好都要指定radix的值,不然可能出現(xiàn)不希望的BUG) 。
② 解析字符串中的有效整數(shù),將其轉(zhuǎn)換為 number 。
③【具體】從第一個(gè)參數(shù)字符串(忽略開(kāi)頭和結(jié)尾的空格)的第1個(gè)字符開(kāi)始截取,遇到非有效整數(shù)的字符時(shí)終止,將截取到的字符串轉(zhuǎn)換為十進(jìn)制數(shù)字返回。如果截取到的字符串為空串時(shí),則返回NaN(轉(zhuǎn)換失?。?。
④【有效整數(shù)的字符】**正負(fù)號(hào)(+或-) 整數(shù)(0~基數(shù)-1) **,即二進(jìn)制為 [+/-] (0~1),八進(jìn)制為 [+/-] (0~7),十進(jìn)制為 [+/-] (0~9),十六進(jìn)制為 [+/-] (0~F),36進(jìn)制為 [+/-] (0~Z),字母不區(qū)分大小寫。
⑤ 將整型數(shù)值以特定基數(shù)轉(zhuǎn)換成它的字符串值可以使用 intValue.toString(radix) 。
3)parseFloat(string) —— 將字符串轉(zhuǎn)為浮點(diǎn)數(shù)
parseFloat('10.24') // 10.24
parseFloat('10.24e3') // 10240
parseFloat('1024e3') // 1024000
parseFloat('1m0.24e3') // 1
parseFloat('A010') // NaN
parseFloat(true) // NaN
parseFloat(null) // NaN
parseFloat(' ') // NaN(會(huì)忽略字符串開(kāi)頭和結(jié)尾的空格)等價(jià)于 parseFloat('')
① 只接收一個(gè)參數(shù),即待轉(zhuǎn)換的字符串,非字符串會(huì)自動(dòng)轉(zhuǎn)為字符串。
② 截取字符串中的有效數(shù)字,將其轉(zhuǎn)換為 number 。
③【具體】從字符串(忽略開(kāi)頭和結(jié)尾的空格)的第1個(gè)字符開(kāi)始截取,遇到非有效數(shù)字的字符時(shí)終止,將截取到的字符串轉(zhuǎn)換為十進(jìn)制數(shù)字返回。如果截取到的字符串為空串時(shí),則返回NaN(轉(zhuǎn)換失?。?br>
④【有效數(shù)字的字符】正負(fù)號(hào)(+或-)、數(shù)字(0-9)、小數(shù)點(diǎn) 或者 科學(xué)記數(shù)法中的指數(shù)(e或E) 。
⑤ NaN 是 number類型的一個(gè)特殊值,可以調(diào)用 isNaN(parseInt('1s')) 判斷。
3. 轉(zhuǎn)為 object 類型(又稱引用類型)
從JS類型轉(zhuǎn)換一覽表中可以看出,將基本類型轉(zhuǎn)換為 object 類型使用的方法是調(diào)用某構(gòu)造函數(shù)。
new String(1024) // String {"1024"}
new Boolean(1024) // Boolean {true}
new Boolean(NaN) // Boolean {false}
new Number(1024) // Number {1024}
new Number('ko') // Number {NaN}
new Number('098') // Number {98}
new Number('0o77') // Number {63}
new Number('0b100') // Number {4}
三、基本類型與對(duì)象
內(nèi)存又分為堆內(nèi)存和棧內(nèi)存,就內(nèi)存分配而言,基本類型是存放于棧內(nèi)存 stack 中,而對(duì)象是存放在堆內(nèi)存 Heap 中,其堆中存放的地址再存放于棧內(nèi)存中(如下圖)。
