在這篇筆記中,我們會說明如何利用 typeof 這個內建的關鍵字來正確地檢驗運算元的型別。
讓我們來看一下 type of 的使用還有它回傳的結果:
var a = 3;
console.log(typeof a); // number
var b = "Hello";
console.log(typeof b); // string
var c = {};
console.log(typeof c); // object
var d = [];
console.log(typeof d); // object
var e = false;
console.log(typeof e); // boolean
這裡,我們可以看到大部分的型別都能正確回傳,除了陣列它一樣會回傳成Object。
為了避免這個問題,如果我們想要檢測該物件是否為一陣列的時候,我們可以用如下的語法:
var d = [];
console.log(typeof d); // object
console.log(Object.prototype.toString.call(d)); // [object Array]
如此,它將會回傳 [Object Array] ,讓我們知道它是個陣列。
讓我們再來看一下其他的資料型別:
function Person(name){
this.name = name;
}
console.log(typeof Person); // function
var f = new Person("Jane");
console.log(typeof f); // object
console.log(typeof undefined); // undefined
console.log(typeof null); // object
從這裡,我們可以看到function的話,能夠正確回傳function;而如果是用funtion當作建構子所建立出來的物件,則是物件沒錯;如果是undefined回傳一樣是屬於undefined型別;最後一個比較奇怪的是,如果是null,會傳成object,這個則是比較需要留意的地方。
在MDN的網站列了typeof的可能回傳值:
圖片來源:MDN - typeof |
程式範例
var a = 3; console.log(typeof a); // number var b = "Hello"; console.log(typeof b); // string var c = {}; console.log(typeof c); // object var d = []; console.log(typeof d); // object console.log(Object.prototype.toString.call(d)); // [object Array] var e = false; console.log(typeof e); // boolean function Person(name){ this.name = name; } console.log(typeof Person); // function var f = new Person("Jane"); console.log(typeof f); // object console.log(typeof undefined); // undefined console.log(typeof null); // object
→回到此系列文章目錄
0 意見:
張貼留言