*本文章主要總結一下js數據類型的識別判斷方法
tyoeof
instanceof
Object.prototype.toString.call
constructor
最後封裝一個函數,能夠判別全部的類型*javascript
基本類型:java
undefined(小寫)
,在使用var聲明變量可是未對其加以初始化時,這個變量的值就是undefined。null(小寫)
,null值表示一個空對象指針,因此用typeof操做符檢測null值會返回object的緣由。true和false(小寫)
。引用類型數組
首先typeof不是方法,只是一個操做符。函數
Null除外
)Function除外
)返回的值首字母都是小寫
!!!!!!!!//識別標準類型 typeof "jerry"; //"string" typeof 12; //"number" typeof true; //"boolean" typeof undefined; //"undefined" typeof null; //"object" typeof {name:"jerry"}; //"object" //識別引用類型 typeof function(){}; //"function" typeof []; //"object" typeof new Date; //"object" typeof /\d/; //"object" //建立一個自定義對象 function Person(){}; typeof new Person; //"object"
//可以判別引用類型 [] instanceof Array; //true /\d/ instanceof RegExp; //true new Date instanceof Date; //true var a = function(){}; a instanceof Function; //true //不能判別原始類型 1 instanceof Number; //false "jerry" instanceof String; //false //可以判別自定義對象類型及父子類型 //自定義類型 function Person(){}; Person instanceof Function; //true //父子類型 function Point(x,y){ this.x = x; this.y = y; } function Cirele(x,y,r){ Point.call(this,x,y); this.radius = r; } Circle.prototype = new Point(); Circle.prototype.constructor = Circle; var c = new Circle(1,1,2); c instanceof Circle //true c instanceof Point //true
結論
:測試
Object.prototype.toString.call("123"); //"[object String]" //封裝函數,並作截取 function type(obj){ return Object.prototype.toString.call(obj).slice(8,-1); } //測試 type("123"); //"String" //自定義類型 function Point(x,y){ this.x = x; this.y = y; } //測試 type(new Point(1,2)); //"Object"
結論:this
//判斷基本類型(基本類型也有構造函數);可是null和undefined除外,它倆沒有構造函數 "jerry".constructor === String; //true (1).constructor ===Number; //true //判斷引用類型 new Date().constructor === Date; //true [].constructor === Array; //true //判斷自定義對象 function Person(name){ this.name = name; } new Person("jerry").constructor === Person; //true //對constructor判別進行方法的封裝 function getConstructorName(obj){ return (obj===undefined||obj===null)?obj: (obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1]); }
封裝的原理:prototype
math(/function\s*([^(]*)/)[1]
:匹配構造函數的名稱,正則匹配結論:指針
結論:因此能夠封裝一個函數getConstructorName判斷全部類型,可是這個函數返回的除了null和undefined是小寫以外,其餘的首字母都是大寫。code