回顧: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"
優勢:能夠判斷某個對象是不是由某個構造函數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 } }
優勢:全部的數據類型都能判斷
原理:一切皆對象
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]", } }