判斷js中的數據類型有一下幾種方法:typeof、instanceof、 constructor、 prototype、 三方庫。數組
number: 數字,整數、浮點數等等, string: 單引號或者雙引號來講明, Boolean: 返回true和false,這兩個值不必定對應1和0 object: 對象,能夠執行new操做符後跟要建立的對象類型的名稱來建立。 null: 只有一個值得數據類型,邏輯上講,null值表示一個空對象指針。 undefined:未定義,使用var聲明變量但未對其初始化時,變量的值就是undefined。
在實際的項目應用中,typeof只有兩個用途,就是檢測一個元素是否爲undefined,或者是否爲function。緣由以下:
JavaScript Garden整理出來了以下表格框架
Value function typeof ------------------------------------- "foo" String string new String("foo") String object 1.2 Number number new Number(1.2) Number object true Boolean boolean new Boolean(true) Boolean object new Date() Date object new Error() Error object [1,2,3] Array object new Array(1, 2, 3) Array object new Function("") Function function /abc/g RegExp object new RegExp("meow") RegExp object {} Object object new Object() Object object
var a = [1,2,3]; var b = new Date(); var c = function(){}; alert(a instanceof Array) ---------------> true alert(b instanceof Date) alert(c instanceof Function) ------------> true alert(c instanceof function) ------------> false
var a = [1,2,3]; var b = new Date(); var c = function(){}; alert(a.constructor === Array) ----------> true alert(b.constructor === Date) -----------> true alert(c.constructor === Function) -------> true
注:
使用instaceof和construcor,被判斷的引用類型(Object Array)必須是在當前頁面聲明的!好比,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面),在子頁面中聲明瞭一個array,並將其賦值給父頁面的一個變量,這時判斷該變量,Array ==object.constructor;會返回false;
緣由:
一、array屬於引用型數據,在傳遞過程當中,僅僅是引用地址的傳遞。
二、每一個頁面的Array原生對象所引用的地址是不同的,在子頁面聲明的array,所對應的構造函數,是子頁面的Array對象;父頁面來進行判斷,使用的Array並不等於子頁面的Array。函數
Object.prototype.toString.call()
var toString = Object.prototype.toString; toString.call(undefined); -------------> [object Undefined] toString.call(null); -------------> [object Null] toString.call(new Date); -------------> [object Date] toString.call(new String); -------------> [object String] toString.call(Math); -------------> [object Math]
jQuery.type()源碼大數據
var class2type = {} ; "Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){ class2type[ "[object " + e + "]" ] = e.toLowerCase(); }) ; function _typeof(obj){ if ( obj == null ){ return String( obj ); } return typeof obj === "object" || typeof obj === "function" ? class2type[ class2type.toString.call(obj) ] || "object" : typeof obj; }
注:數組還能夠用 Array.isArray(); 或者根據其具備的方法去判斷。再也不細述prototype