本文主要针对 Null,ExpReg,Array,Date这一些typeof函数辨别不了的对象;
顺便贴上一篇关于typeof的理解:http://www.cnblogs.com/chaky/p/7284163.html
首先,辨别对象类型的方法:
1、instanceof(是否...的实例) 返回true or false
我们可以用它来辨别 ExpReg Array Date类型的对象 不适用于null
2、constructor //原型对象里的构造器指向; 不支持null识别
这里有一处不解的是:
Object指向构造器是Function
而他原型里的construction指向的是 叫Object的构造函数
3、isArray 专门用于数组识别 (Array对象特有方法,不被子例 ‘继承‘ );
4、String() 区分null 和 undefined //该函数底层实现应有全等比较符
5、根据对象类型特性判断属于是哪种对象;
有3种类型 Array String NodeList;
其中他们都有 length属性;
forEach只有 Array和NodeList有;
Array有concat,NodeList没有
通过特性的辨别我们就可以区分出3种属性类型;
6、万用辨别类型的方法,原理是通过 toString这方法;//转载,非原创
var is = function (obj,type) {
return (type === "Null" && obj === null) ||
(type === "Undefined" && obj === void 0 ) ||
(type === "Number" && isFinite(obj)) || Object.prototype.toString.call(obj).slice(8,-1) === type;
}
------------------------如果有更好的辨别方法欢迎留言!--------------------------