小议 判断"特殊js对象类型" 的方法

先声明一下 这算不上原创, 只是学习到的知识点的总结 .


上一篇 blog 新学一招, 判断一个js对象是不是数组 中提到了一种 判断js对象是不是 数组的方法.

后来我又从
http://ajaxian.com/archives/isarray-why-is-it-so-bloody-hard-to-get-right
帖子的回复中 看到了一个增强的判断 特殊js对象的类型的方法

var is = {
	types : ["Array","RegExp","Date","Number","String","Object","HTMLDocument"]
};
for(var i=0,c;c=is.types[i++];){
	is[c] = (function(type){
		return function(obj){
			return Object.prototype.toString.call(obj) == “[object "+type+"]“;
		}
	})(c);
}


这里的"特殊"是指什么呢?

首先 "Array","RegExp","Date","HTMLDocument"这几个类型的对象的 typeof 结果都是"object"
当然 更主要的是  Array RegExp Date ... 这几个类 是和 window对象绑定的.

所以不能简单的通过 typeof   instanceof 和 constructor  来做判断.
因为
obj instanceof Array 成立的前提是 obj 和Array  要属于一个window
obj .constructor == Array 成立的条件也是一样

RegExp Date ... 类似.






你可能感兴趣的:(JavaScript,C++,c,C#,prototype)