先声明一下 这算不上原创, 只是学习到的知识点的总结 .
上一篇 blog [url="http://fins.iteye.com/blog/315643"]新学一招, 判断一个js对象是不是数组[/url] 中提到了一种 判断js对象是不是 数组的方法.
后来我又从
[url]http://ajaxian.com/archives/isarray-why-is-it-so-bloody-hard-to-get-right[/url]
帖子的回复中 看到了一个增强的判断 [color=red]特殊js对象的类型[/color]的方法
这里的"特殊"是指什么呢?
首先 "Array","RegExp","Date","HTMLDocument"这几个类型的对象的 typeof 结果都是"object"
当然 更主要的是 Array RegExp Date ... 这几个类 是和 window对象绑定的.
所以不能简单的通过 typeof instanceof 和 constructor 来做判断.
因为
obj instanceof Array 成立的前提是 obj 和Array 要属于一个window
obj .constructor == Array 成立的条件也是一样
RegExp Date ... 类似.
上一篇 blog [url="http://fins.iteye.com/blog/315643"]新学一招, 判断一个js对象是不是数组[/url] 中提到了一种 判断js对象是不是 数组的方法.
后来我又从
[url]http://ajaxian.com/archives/isarray-why-is-it-so-bloody-hard-to-get-right[/url]
帖子的回复中 看到了一个增强的判断 [color=red]特殊js对象的类型[/color]的方法
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 ... 类似.