一、數據類型
JS中有5中簡單數據類型(也稱為基本數據類型):Undefined、Null、Boolean、Number、String。還有一種復雜數據類型------Object,Object本質是由一組無序的名值對組成的。
鑒於ECMAScript是松散類型的(可以給變量賦值為任意類型。),因此需要有一種手段來檢測給定變量的數據類型----typeof就是負責提供這方面信息的操作符。
對一個值使用typeof操作符可能返回下列某個字符串:
undefined----如果這個值未初始化或未聲明;
Boolean----如果這個值是布爾值;
string---如果這個值是字符串;
number----如果這個值是數值;
object----如果這個值是對象或null;
function----如果這個值是函數。
有些時候,typeof操作符會返回一些令人迷惑但技術上卻正確的值。比如調用typeof null 會返回“object”,應為特殊值null被認為是一個空的對象引用。
從技術角度講,函數在ECMAScript中是對象,不是一種數據類型。然而,函數也確實有一些特殊的屬性,因此通過typeof操作符來區分函數和其他對象是有必要的。
二、顯式的轉換數據類型
顯示的轉換數據類型主要通過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(),這個函數能夠將任何類型的值轉換為字符串。
三、隱式的數據轉換
在JS中有一些操作符或者語句也會進行數據轉換。比如if語句將條件轉換為布爾類型值。
a. 遞增和遞減操作符
遞增和遞減操作符直接借鑒自C,而且各有兩個版本:前置型和后置型(a++ ,a-- ,++a , --a)。顧名思義,前置型應該位於要操作的變量之前,而后置型應該位於要操作的變量之后。
這4個操作符對任何值都適用,也就是他們不僅適用於整數,還可以用於字符串、布爾值、浮點數值和對象,此時伴隨着隱式的數據類型轉換。
b. 一元加和減操作符
在對非數值應用一元加操作符時,該操作符會像Number()轉型函數一樣對這個值執行轉換。換句話說,布爾值false和true將被轉換為0和1。
b. 邏輯非操作符 與 比較操作符 將任意值轉換為 布爾值
邏輯非操作符首先會將他的操作數轉換為一個布爾值,然后再對其求反。
關系比較操作符
if,do-while,while語句會將判斷語句轉換為布爾類型值。