1. 程式人生 > 其它 >JavaScript中的typeof操作符 型別轉換

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"