在js中識別數據類型有四種方法函數
分別是:1. typeof 2. Object.prototype.toString 3. constructor 4. instanceofthis
這幾種方法各有優缺點spa
先說一下js中的數據類型prototype
js中一共有十五種類型稱之爲原生對象code
Undefined、Null、Number、String、Boolean、Object、Function、Array、Date、RegExp、Error、Math、JSON、全局對象、argumentsregexp
其中:對象
標準類型:Undefined、Null、Number、String、Boolean、Objectblog
構造器:Object、Number、String、Boolean、Function、Arra、Date、RegExp、Error作用域
對象:Math、JSON、全局對象、argumentsstring
標準內置對象:Number、String、Boolean、Object、Function、Array、Date、RegExp、Error、Math、JSON、全局對象
一 typeof:能識標準類型(Null除外),能識別引用類型(Function除外)
1 alert(typeof 'abc'); //string 2 alert(typeof 12); //number 3 alert(typeof true); //boolean 4 alert(typeof undefined); //undefined 5 alert(typeof null); //object 6 alert(typeof { name: 1}); //object 7 alert(typeof function(){}); //function 8 alert(typeof []); //object 9 alert(typeof new Date); //object 10 alert(typeof /\d/); //object 11 function Parent(){} //自定義對象 12 alert(typeof new Parent); //object
二 Object.prototype.toString:能識別標準類型及內置對象類型但不能識別自定義類型
function type(obj){ //封裝Object.prototype.toString return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase(); } alert(type('abc')); //string alert(type(123)); //number alert(type(true)); //boolean alert(type(undefined)); //undefined alert(type(null)); //null alert(type({name:1})); //object alert(type(function(){})); //function alert(type([])); //array alert(type(new Date)); //date alert(type(/\d/)); //regexp function Parent(){} alert(type(new Parent)); //object
三 constructor:識別標準類型(Undefined\Null除外)、識別內置對象類型、識別自定義對象類型
// 判斷原始類型 console.log('abc'.constructor === String); //true console.log((123).constructor === Number); //true console.log(true.constructor === Boolean); //true console.log({name:1}.constructor === Object);//true // 判斷內置對象類型 console.log([].constructor === Array); //true // 判斷自定義對象(構造函數) function Parent(name){ this.name = name; } console.log(new Parent('二珂').constructor === Parent); //true
四 instanceof:判別內置對象類型、不能判別原始類型、判別自定義對象類型和父子類型
// 可以判別內置對象類型 console.log([] instanceof Array); //true console.log(/\d/ instanceof RegExp); //true // 不能判別原始對象類型 console.log((123) instanceof Number); //false console.log('愛你呦' instanceof String); //false console.log( true instanceof Boolean); //false // 可以判別自定義對象類型和父子類型 function Point(x,y){ this.x = x; this.y = y; } function Circle(x,y,r){ Point.call(this,x,y); //將Point的做用域借給Circle使用 this.radius = r; } Circle.prototype = new Point(); //Circle是Point的子對象 Circle.prototype.constructor = Circle; var c = new Circle(1, 1, 2); console.log(c instanceof Circle); //true console.log(c instanceof Point); //true
五 jQuery中的 $.type()方法;