回顾: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]", } }