類型識別的幾種方法

  在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()方法;

相關文章
相關標籤/搜索