2016年7月6日

[筆記] JavaScript 中利用 typeof 檢驗運算元所代表的型別


在這篇筆記中,我們會說明如何利用 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 意見:

張貼留言