javascript 數據類型判斷總結

一 typeof

回顧:js有五種基本數據類型:值類型("number","string","boolean","undefined") 和引用類型 (「object」),其中「object」 又包含「array,function,null」等數據類型。
typeof 能夠判斷全部的值類型"number","string","boolean","undefined"和引用類型中的‘function’ 類型,其他全部的引用類型都只能返回‘object’。
typeof 能返回6中數據類型。dom

type of 1;//"number"
type of 'test';//"string"
type of true;//"boolean"
type of undefined;//"undefined"
type of console.log;//"function"
type of null;//"object"
type of [];//"object"
type of {};//"object"

二 instanceof

優勢:能夠判斷某個對象是不是由某個構造函數new 出來的 ,凡是經過構造函數建立的都能進行判斷
例如:函數

//構造函數假如被看成普通函數直接執行拋出錯誤
function Person (){
    if(!(this instanceof Person)){  // 當Person被直接執行時,this在非嚴格模式下是指向window的,而被看成構造函數時,this 是指由Person new出來的對象
        throw new Error(‘Person爲構造函數,請使用 new Person’);
    }
}

缺點:不能判斷null 類型以及非new 出來的的值類型,不能精確的區分array、function和objectthis

function utility(){
    return {
        isAarry:(data)=> data instanceof  Array,
        isFunction:()=> data instanceof Function
    }
}

三 Object.prototype.toString

優勢:全部的數據類型都能判斷
原理:一切皆對象
js 裏面還有好多類型判斷 [object HTMLDivElement] div 對象 , [object HTMLBodyElement] body 對象 ,object Document或者 [object HTMLDocument](firefox,google) ......各類dom節點的判斷,這些東西在咱們寫插件的時候都會用到。google

function utility(){
    return {
        isArray:(o)=>Object.prototype.toString.call(o) == "[object Array]",
        isObj:(o)=>Object.prototype.toString.call(o) == "[object Object]",
        isNull:(o)=>Object.prototype.toString.call(o) == "[object Null]",
        isFunction:(o)=>Object.prototype.toString.call(o) == "[object Function]",
        isDate:(o)=>Object.prototype.toString.call(o) == "[object Date]", 
        isDocument:(o)=>Object.prototype.toString.call(o) =="[object Document]"|| Object.prototype.toString.call(o) == "[object HTMLDocument]",
        isNumber:(o)=>Object.prototype.toString.call(o) == "[object Number]", 
        isString:(o)=>Object.prototype.toString.call(o) == "[object String]", 
        isUndefined:(o)=>Object.prototype.toString.call(o) == "[object Undefined]", 
        isBoolean:(o)=>Object.prototype.toString.call(o) == "[object Boolean]", 
    }
}
相關文章
相關標籤/搜索