JavaScript檢測類型

由於剛纔參加了一個公司的在線筆試,在檢測類型這方面出了點小亂子,所以寫篇文章做個筆記。


typeof操作符


ES有五種簡單的數據類型:Undefined,Null,Boolean,Number和String,還有一種複雜的數據類型Object。對一個值使用typeof操作符可能返回下列某些字符串:
  1. “undefined”——如果這個值未定義;
  2. “boolean”——如果這個值是布爾值;
  3. “string”——如果這個值是字符串;
  4. “number”——如果這個值是數值;
  5. “object”——如果這個值是對象或null;
  6. “function”——如果這個值是函數。
以下是使用typeof的例子:

var arr = [];
var str = 'string';var num = 100;var fun = function() { console.log('this is a test.');};var obj = {};var nothing;var bool = true;console.log(typeof arr); // objectconsole.log(typeof str); // stringconsole.log(typeof num); // numberconsole.log(typeof fun); // fucntionconsole.log(typeof obj); // objectconsole.log(typeof nothing); // undefinedconsole.log(typeof bool); // boolean


由上可知,typeof對於Object、Array、Null都會返回對象,同時,在Safari及之前的版本、Chrome7及之前的版本對正則表達式使用typeof操作符時會返回“function”,而其他瀏覽器在這種情況下會返回“object”。另外,在使用typeof操作符時,也可當其爲函數一樣使用,例如typeof(90);返回“number”。

instanceof操作符


typeof操作符能夠很好的檢測出String、Number、Boolean、Undefined的值,但是對於Object和Array(實際上Array也是一種對象),那麼就無法很好地檢測出來了。instanceof操作符能夠檢測某個實例是否是某個特定對象的實例,以下是其使用方法:


var Object1 = function() {
  this.name = 'paper_crane';
  this.age = 22;
}
var Object2 = function() {
  this.name = 'paperCrane';
  this.school = 'sysu';
}

var arr = [];

var obj1 = new Object1();
var obj2 = new Object2();
console.log(obj1 instanceof Object)
console.log(obj1 instanceof Object1); // true
console.log(obj1 instanceof Object2); // true
console.log(obj2 instanceof Object2); // true
console.log(obj2 instanceof Object1); // true
console.log(arr instanceof Array);    // true
console.log(null instanceof Object);  // false


由上面的示例可以看出,instanceof操作符能夠判斷一個實例的類型,但是這個函數也有其缺陷:它假定只有一個全局執行環境。如果網絡中包含過個框架,那麼實際上就存在兩個以上不同的全局執行環境,從而存在兩個以上不同版本的Array構造函數。此時,檢測是都是數組類型的最好方法是使用Array.isArray(params)函數,可以準確的檢測其是否是數組。

發佈了32 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章