JavaScript中的typeof操作符 型別轉換
HTML5學堂:JavaScript是弱變數型別的語言,有些時候我們需要知道變數的資料型別,並且需要進行資料型別的轉換,我們通過這篇文章來學習一下如何獲取變數的資料型別,以及數字和字串如何相互轉換。
typeof操作符
由於JavaScript是弱資料型別的語言,因此需要有一種方法檢測變數的資料型別,這時我們可以用typeof來檢測變數的資料型別。例如:
var str = "HTML5學堂"; var num = 111; var obj = {"name": "HTML5學堂"}; var blank = null; var a; var sta = true; var fun = function(){ alert("HTML5學堂"); } console.log(typeof(str)); // "string" console.log(typeof(num)); // "number" console.log(typeof(obj)); // "object" console.log(typeof(blank)); // "object" console.log(typeof(a)); // "undefined" console.log(typeof(sta)); // "boolean" console.log(typeof(fun)); // "function"
這裡需要注意的是,typeof(null)的返回值是object,因為null被認為是一個空的物件引用。
typeof除了上面的寫法還有第二種寫法,例如:
var a = "HTML5學堂";
console.log(typeof a); // "string"
字串轉換為數字的方法
字串轉換為數字的方法可以分為兩種,一個是顯式轉換,一種是隱式轉換。顯式轉換是通過函式的形式,將字串轉換成陣列的形式,隱式轉換則是通過運算子的方式將字串轉換成數字的形式。
顯式轉換
在顯式轉換中,有三個函式可以把字串轉換為數值:Number()、parseInt()、parseFloat()。Number()可以用於任何資料型別,而另外兩個函式則專門用於把字串轉換成數值。
Number()轉換規則如下:
如果字串為數值字串,則將其轉換為十進位制數值。
如果字串中包含有效的十六進位制格式,例如"0xf",則將其轉換為相同大小的十進位制整數值。
如果字串為空字串或空格字串,則將其轉換為0。
如果字串中含有除上述格式以外的字元,則將其轉換成NaN。
例如:
console.log(Number(" ")); // 0
console.log(Number("123")); // 123
console.log(Number("HTML5學堂")); // NaN
console.log(Number("0xf")); // 15
parseInt()函式在轉換字串時,更多的是看其是否符合數值模式。它會忽略字串前面的空格,直至找到第一個非空格字元。如果第一個字元不是數字字元或者負號,parseInt()就會返回NaN,如果是空字串,則會返回NaN。如果第一個字元是數字字元,parseInt()會繼續解析第二個字元,直到解析完所有後續字元或者遇到非數字字元。例如"1234h5course"會被轉換成1234,"h5course"會被完全忽略。類似的,"123.4"會被轉換成123,因為小數點並不是有效的數字字元。如果字串中包含有效的十六進位制格式,例如"0xf",則將其轉換為相同大小的十進位制整數值。例如:
console.log(parseInt("")); // NaN
console.log(parseInt("123h5course")); // 123
console.log(parseInt(" 123")); // 123
console.log(parseInt("123")); // 123
console.log(parseInt("123.7")); // 123
console.log(parseInt("0xf")); // 15
parseFloat()與parseInt()函式相似,只不過parseInt()返回的是整數,而parseFloat()可以返回小數。parseFloat()轉換的時候,也是從第一個字元開始解析每個字元,直到解析到字串末尾,或者解析到遇見一個無效的浮點數字字元為止,也就是說,字串中的第一個小數點是有效的,而第二個小數點就是無效的。例如"12.34.56"將會被轉換為12.34。如果字串包含的是一個可解析為整數的數,parseFloat()回返回整數。例如:
console.log(parseFloat("")); // NaN
console.log(parseInt("123.4h5course")); // 123.4
console.log(parseInt(" 123")); // 123
console.log(parseInt("123.45")); // 123.45
console.log(parseInt("123.7")); // 123.7
console.log(parseInt("123.75.67")); // 123.75
console.log(parseInt("0xf")); // 15
隱式轉換的方式可以通過+、* 1、/ 1的運算來轉換成字串。例如:
var a = "123";
var b = "456";
var c = "789";
a = +a;
b = b * 1;
c = c / 1;
console.log(a); // 123
console.log(b); // 456
console.log(c); // 789
其他型別變數轉換為字串的方法
我們想把其他型別變數轉換成字串,這個時候,我們通常使用toString()方法。幾乎每一個值都有toString()方法。例如:
var a = 123;
var bool = true;
console.log(a.toString()); // "123"
console.log(bool.toString()); // "true"
數值、布林值、物件和字串都有toString()方法,但null和undefined沒有這個方法。我們還可以使用轉型函式String(),這個函式能夠將任何型別的值轉換成字串。例如:
var obj = null;
console.log(String(obj)); // "null"
var unde = undefined;
console.log(String(unde)); // "undefined"
var a = 123;
console.log(String(a)); // "123"
var bool = true;
console.log(String(bool)); // "true"