1. 程式人生 > >js判斷各種資料型別通用方法

js判斷各種資料型別通用方法

瞭解js的都知道, 有個typeof 用來判斷各種資料型別,有兩種寫法:typeof xxx ,typeof(xxx)

如下例項:

typeof   2      輸出   number
typeof   null   輸出   object

typeof   {}    輸出   object

typeof    []    輸出   object

typeof   (function(){})  // 輸出 function

typeof    undefined  // 輸出 undefined

typeof   '222'  // 輸出 string

typeof  true  // 輸出 boolean
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

這裡麵包含了js裡面的五種資料型別 number string boolean undefined object和函式型別 function

看到這裡你肯定會問了:我怎麼去區分物件,陣列和null呢?

接下來我們就用到另外一個利器:Object.prototype.toString.call

這是物件的一個原生原型擴充套件函式,用來更精確的區分資料型別。

我們來試試這個玩兒意兒:

var   gettype=Object.prototype.toString

gettype.call('aaaa')  // 輸出 [object String]

gettype.call(2222
) // 輸出 [object Number] gettype.call(true) // 輸出 [object Boolean] gettype.call(undefined) // 輸出 [object Undefined] gettype.call(null) // 輸出 [object Null] gettype.call({}) // 輸出 [object Object] gettype.call([]) // 輸出 [object Array] gettype.call(function(){}) // 輸出 [object Function]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

看到這裡,剛才的問題我們解決了。

constructor也能判斷資料型別:

如:

''.constructor==String

[].constructor==Array

var obj= new Object()   obj.constructor==Object
  • 1
  • 2
  • 3
  • 4
  • 5

其實js 裡面還有好多型別判斷 [object HTMLDivElement] div 物件 , [object HTMLBodyElement] body 物件 ,[object Document](IE)或者 [object HTMLDocument](firefox,google) ……各種dom節點的判斷,這些東西在我們寫外掛的時候都會用到。

可以封裝的方法如下 :

var   gettype=Object.prototype.toString

var    utility={

    isObj: function(o){

        return    gettype.call(o)=="[object Object]";

    },

    isArray:function(o){

        return    gettype.call(o)=="[object Array]";

    },

    isNULL:function(o){

        return    gettype.call(o)=="[object Null]";

    },

    isDocument:function(){

        return    gettype.call(o)=="[object Document]"|| [object HTMLDocument];

    }

........

}