1、數據類型函數
JS中有5中簡單數據類型(也稱爲基本數據類型):Undefined、Null、Boolean、Number、String。還有一種複雜數據類型------Object,Object本質是由一組無序的名值對組成的。spa
鑑於ECMAScript是鬆散類型的(能夠給變量賦值爲任意類型。),所以須要有一種手段來檢測給定變量的數據類型----typeof就是負責提供這方面信息的操做符。對象
對一個值使用typeof操做符可能返回下列某個字符串:blog
undefined----若是這個值未初始化或未聲明; ip
Boolean----若是這個值是布爾值;字符串
string---若是這個值是字符串;string
number----若是這個值是數值;io
object----若是這個值是對象或null;console
function----若是這個值是函數。function
有些時候,typeof操做符會返回一些使人迷惑但技術上卻正確的值。好比調用typeof null 會返回「object」,應爲特殊值null被認爲是一個空的對象引用。
從技術角度講,函數在ECMAScript中是對象,不是一種數據類型。然而,函數也確實有一些特殊的屬性,所以經過typeof操做符來區分函數和其餘對象是有必要的。
2、顯式的轉換數據類型
顯示的轉換數據類型主要經過JS定義的數據轉換方法。
a.轉型函數
轉換爲布爾值:
Boolean() :將一個值轉換爲其對應的Boolean值
e.g. var message = 「Hello world!」;
var messageAsBoolean = Boolean(message)
console.log(messageAsBoolean); //true
各類數據類型及其對應的轉換規則。
數據類型 轉換爲true的值 轉換爲false的值
Boolean true false
String 任何非空字符串 「」 (空字符串)
Number 任何非零數字值(包括無窮大) 0和NaN
Object 任何對象 null
Underfined n/a undefined
轉換爲數字:
有3個函數能夠把非數值轉換爲數值:Number()、parseInt()、parseFloat()。第一個函數,即轉型函數Number()能夠用於任何數據類型,而另兩個函數則專門用於把字符串轉換成數值。這三個函數對於一樣的輸入會返回不一樣的結果。
因爲Number()函數在轉換字符串時比較複雜並且不夠合理,所以在處理字符串的時候更經常使用的是parseInt()函數。parseInt()函數在轉換字符串時,更多的是看其是否符合數值模式。它會忽略字符串前面的空格,直至找到第一個非空格字符。若是第一個字符不是數字字符或者負號,parseInt()就會返回NaN;也就是說,用parseInt()轉換空字符串會返回NaN。(Number()對空字符返回0).若是第一個字符是數字字符,parseInt()會繼續解析第二個字符、直至解析完全部後續的字符或者遇到了一個非數字字符。
與parseInt()函數相似,parseFloat()也是從第一個字符(位置0)開始解析每一個字符。並且也是一直解析到字符串末尾,或者解析到碰見一個無效的浮點數字字符爲止。也就是說,字符串中的第一個小數點是有效的,而第二個小數點就是無效的了,所以它後面的字符串將被忽略。
轉換爲字符串
要把一個值轉換爲一個字符串有兩種方式。第一種是使用幾乎每一個值都有的toString()方法,這個方法惟一要作的就是返回相應值的字符串表現。
數值、布爾值、對象、和字符串值(沒錯,每一個字符串也都有一個toString()方法,該方法返回字符串的一個副本)都有toString()方法。但null和undefined值沒有這個方法。
多數狀況下,調用toString()方法沒必要傳遞參數。可是,在調用數值的toString()方法時,能夠傳遞一個參數:輸出數值的基數。默認狀況下,toString()方法以十進制格式返回數值的字符串表示。
在不知道要轉換的值是否是null或undefined的狀況下,還可使用轉型函數String(),這個函數可以將任何類型的值轉換爲字符串。
3、隱式的數據轉換
在JS中有一些操做符或者語句也會進行數據轉換。好比if語句將條件轉換爲布爾類型值。
a. 遞增和遞減操做符
遞增和遞減操做符直接借鑑自C,並且各有兩個版本:前置型和後置型(a++ ,a-- ,++a , --a)。顧名思義,前置型應該位於要操做的變量以前,然後置型應該位於要操做的變量以後。
這4個操做符對任何值都適用,也就是他們不只適用於整數,還能夠用於字符串、布爾值、浮點數值和對象,此時伴隨着隱式的數據類型轉換。
b. 一元加和減操做符
在對非數值應用一元加操做符時,該操做符會像Number()轉型函數同樣對這個值執行轉換。換句話說,布爾值false和true將被轉換爲0和1。
b. 邏輯非操做符 與 比較操做符 將任意值轉換爲 布爾值
邏輯非操做符首先會將他的操做數轉換爲一個布爾值,而後再對其求反。
關係比較操做符
if,do-while,while語句會將判斷語句轉換爲布爾類型值。