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

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


上一篇 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 ... 类似.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值