前面介紹過JS的數(shù)據(jù)類型,總共有七種數(shù)據(jù)類型。number、string、boolean、symbol、null、undefined屬于簡單數(shù)據(jù)類型,object屬于復(fù)雜數(shù)據(jù)類型。
在前端開發(fā)過程中,使用數(shù)據(jù)類型的方式也不單單是聲明后使用,有的時候,需要轉(zhuǎn)換數(shù)據(jù)類型來使用,這里就講講數(shù)據(jù)類型的轉(zhuǎn)換。
轉(zhuǎn)換為字符串
- 轉(zhuǎn)化為字符串,可以用xxx.toString()方法,不過并不是所有的類型都可以用這個方法來轉(zhuǎn)換,number、boolean可行,null、undefined不可行,object可行,但是輸出結(jié)果不是想要的結(jié)果。
(1).toString() // '1'
true.toString() // 'true'
null.toString() // 語法錯誤:Cannot read property 'toString' of null
undefined.toString() // 語法錯誤: Cannot read property 'toString' of undefined
({}).toString() // '[object Object]'
- 除了xxx.toString()以外,還有一個比較快捷全面的方法String(xxx),這個方法,number、boolean、null、undefined都可以轉(zhuǎn)化為字符串。
String(1) // '1'
String(true) // 'true'
String(null) // 'null'
String(undefined) // 'undefined'
String({}) // '[object Object]'
- String(xxx)方法很快捷,但還有一個更加快捷全面的方法,就給轉(zhuǎn)換的類型 + 空字符串'',這個方法和String()方法差不錯,可以多省去幾個字符。
1 + '' // '1'
true + '' // 'true'
null + '' // 'null'
undefined + '' // 'undefined'
var o ={}
o + ''// '[object Object]'
轉(zhuǎn)換為數(shù)字
轉(zhuǎn)換為數(shù)字的方法有大概有五種:
- Number(x)
Number('1') // 1
Number('a') // NaN
- parseInt(x,10),轉(zhuǎn)換為十進制的整數(shù)。parseInt是一個全局函數(shù)
parseInt('1' ,10) // 1
- parseFloat(x)轉(zhuǎn)化為小數(shù)(parse是解析的意思)
parseFloat('1.23' ,10) // 1.23
- x-0,要轉(zhuǎn)換的字符減去0,就會得到一個數(shù)值類型的值。這種方法是最常用的方法。
'1' - 0 // 1
'1.23' - 0 //1.23
- +x,取正,給要轉(zhuǎn)換的字符前一個加號+,取正,就會得到一個數(shù)值類型的。
+'1' // 1
+'1.23' //1.23
轉(zhuǎn)換為布爾
● 轉(zhuǎn)為布爾,使用Boolean(xxx)
● object的Boolean(object),對象都會返回true。
● 除了使用Boolean(),還有有一種更快捷的方式,!!xxx 使用兩個取反符號,取反再取反,就可以返回自己的布爾,這是常用的方法。
● 轉(zhuǎn)換布爾的時候,只有五個特殊的值是false,五個falsy值,數(shù)值中的0和NaN,字符串中的 '' 空字符串,null和undefined。
Boolean(1) // true
Boolean(0) // false
Boolean(NaN) // false
Boolean('a') // true
Boolean('') // false
Boolean(' ') // true
Boolean(null) // false
Boolean('undefined') // false
Boolean({}) //true
轉(zhuǎn)換為null和轉(zhuǎn)換為undefined
這兩個都只有一個值,沒必要轉(zhuǎn)換,直接使用就可以。
轉(zhuǎn)換為symbol
symbo是ES6新出的類型,這里先不討論太多
轉(zhuǎn)換為object
轉(zhuǎn)換為對象object,這個轉(zhuǎn)換方式很奇怪。要想轉(zhuǎn)換為對象,就得理解其他類型和對象有什么區(qū)別。
內(nèi)存
內(nèi)存,就是我們電腦當(dāng)中的內(nèi)存,用來儲存一些數(shù)據(jù)的一個硬件。
JS 引擎將內(nèi)存分為代碼區(qū)和數(shù)據(jù)區(qū),這里我們就只講數(shù)據(jù)區(qū)。
數(shù)據(jù)區(qū)分為Stack(棧內(nèi)存)和Heap(堆內(nèi)存),簡單類型的數(shù)據(jù),直接儲存在Stack棧內(nèi)存中,復(fù)雜類型的數(shù)據(jù),儲存在Heap中,然后把Heap地址寫在Stack棧內(nèi)存中引用。
