1. 程式人生 > >js中判斷物件資料型別的方法

js中判斷物件資料型別的方法

對js中不同資料的布林值型別總結:false:空字串;null;undefined;0;NaN。true:除了上面的false的情況其他都為true;

javascript中有六種資料型別stringbooleanArrayObjectnull;undefined。如何檢測這些資料型別呢,總結方法如下:

第一種方法:typeof

var obj = {'name':'Tom'}
var arr = ['a','b','c']
var str = 'chenxinming'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
	
console.log(typeof obj)    // object
console.log(typeof arr)    // object
console.log(typeof str)    // string
console.log(typeof bool)    // boolean
console.log(typeof num)    // number
console.log(typeof n)    // object
console.log(typeof fn)    // function

通過上面測試,發現typeof檢測陣列和字典時返回型別都是Object,無法區別是陣列還是物件。如果想要檢查是陣列還是物件使用instanceof方法和constructor方法

第二種方法:instanceof

var obj = {'name':'Tom'}
var arr = ['a','b','c']
var str = 'chenxinming'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
    
console.log(obj instanceof Object)  // true
console.log(arr instanceof Array)    // true
console.log(str instanceof String)    // false
console.log(bool instanceof Boolean)    // false
console.log(num instanceof Number)    // false
console.log(n instanceof Object)    // false
console.log(fn instanceof Function)    // true

注意:instanceof 只可以用來判斷陣列和物件、函式,不能判斷string、數字和boolean型別,如果需要判斷string和boolean可使用tostring()方法。

特別注意:

instanceof方法在檢查陣列是否為物件時,返回結果為True

var arr = ['a','b','c']

console.log(arr instanceof Object)    // true

如果使用instanceof需要嚴格判斷是陣列或者是物件時,改進程式碼如下:

var obj = {'name':'Tom'}
var arr = ['a','b','c']
var str = 'chenxinming'

var getDataType = function(data){
        if(data instanceof Array){
            return 'Array'
            }
        else if (data instanceof Object){
            return 'Object' 
            }
        else{
            return 'data is not obejct type'
        }
    }
    
getDataType(obj)    // Object
getDataType(obj)    // Array
getDataType(obj)    // data is not obejct type

第三種方法:constructor

var obj = {'name':'Tom'}
var arr = ['a','b','c']
var str = 'chenxinming'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
    
console.log(obj.constructor == Object)  // true
console.log(arr.constructor == Array)  // true
console.log(str.constructor == String)  // true
console.log(bool.constructor == Boolean)  // true
console.log(num.constructor == Number)  // true
console.log(fn.constructor == Function)  // true

測試發現constructor支援檢查Object、Array、String、Boolean、Number、Function

第四種方法:toString(建議使用)

var obj = {'name':'Tom'}
var arr = ['a','b','c']
var str = 'chenxinming'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
    
console.log(Object.prototype.toString.call(obj))    // [object Object]
console.log(Object.prototype.toString.call(arr))    // [object Array]
console.log(Object.prototype.toString.call(str))    // [object String]
console.log(Object.prototype.toString.call(bool))    // [object Boolean]
console.log(Object.prototype.toString.call(num))    // [object Number]
console.log(Object.prototype.toString.call(n))    // [object Null]
console.log(Object.prototype.toString.call(fn))    // [object Function]

從測試看出來,最好使用toString,這個方法功能比較全面。