`

小议 判断"特殊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 ... 类似.






3
0
分享到:
评论
6 楼 jayliud 2010-10-30  
function getType(a){ alert(typeof a == 'undefined' ? 'undefined' : a ? Object.prototype.toString.apply(a).replace(/(\[|\]|object|\s)/g,"") : 'null')}
5 楼 CodingMouse 2009-12-09  
我补充了下注释,看代码都应该知道怎么调用了:

/**
* 判断一个Javascript对象是什么样的object类型
* 调用示例:
* var a = new Date();
* var b = document.createElement("table");
* var c = [];
* alert("表达式:is[\"Date\"](a) 返回值为:" + is["Date"](a)); // 返回true
* alert("表达式:is[\"Object\"](b) 返回值为:" + is["Object"](b));  // 返回true
* alert("表达式:is[\"Array\"](c) 返回值为:" + is["Array"](c));  // 返回true
* @type
*/
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);  
4 楼 minglelui 2009-08-10  
楼主能否举例使用的实例?
3 楼 ferly_j 2009-07-20  
这个写法太巧妙了,收录了
2 楼 czwlucky 2009-01-21  
这种循环写的太难理解了,比较晕。。。
1 楼 ayound 2009-01-14  
这个方法不错,比较准确

相关推荐

    小议俄语舌音的练习方法.doc

    小议俄语舌音的练习方法.doc

    小议改变学生学习方法.doc

    小议改变学生学习方法.doc

    小议JavaScript库——Dojo、jQuery和PrototypeJS的比较.pdf

    PrototypeJS 库是一个单独的 JavaScript 文件,提供了许多有用的功能,如面向对象的抽象模型、XMLHttpRequest 之上的抽象等。它采用类驱动开发的方式实现,这一点没有什么出彩之处。 这三个库都提供了许多有用的...

    小议老舍作品标点符号的特殊运用.docx

    小议老舍作品标点符号的特殊运用.docx

    小议总监理工程师的工作方法.doc

    【总监理工程师的工作方法】 总监理工程师在建设工程监理中扮演着至关重要的角色,他们是监理单位在项目中的核心代表,全面负责合同履行与项目监理机构的管理工作。根据《建设工程监理规范》GB50319—2000,总监理...

    小议电子工艺学之电烙铁使用方法浅析.doc

    小议电子工艺学之电烙铁使用方法浅析.doc

    社会科学方法论演进小议.pdf

    他尤其强调了“是”与“应当”的分别,指出了事实判断与价值判断之间的界限。这一理论对科学的独立性和价值中立性提出了明确要求,为社会科学方法论提供了重要的哲学依据。 在康德的理论体系中,知识被划分为先天...

    C#128打印方法小议 源代码

    首先,通过NuGet包管理器安装`BarcodeLib`,然后在代码中创建`Barcode`对象,设置类型为`Code128`,输入数据并生成图像。 ```csharp using BarcodeLib; // 创建一个Code128类型的条形码 var barcode = new Barcode...

    小议地铁区间隧道特殊地层施工技术.doc

    【地铁区间隧道特殊地层施工技术】 在城市轨道交通建设中,地铁区间隧道的施工面临着各种复杂地层条件,尤其在特殊地层如流砂层、松散砂层中施工,技术要求极高。本文以北京地铁太阳宫~三元桥站区间隧道为例,探讨...

    小议我国缓刑类型的完善.doc

    【缓刑概述】 缓刑是一种刑事处罚制度,它允许对符合条件的犯罪人暂时不执行...随着社会和法律的发展,我国的缓刑类型也有待进一步完善,以更好地适应复杂多样的犯罪情况,促进犯罪人的再社会化,以及维护社会稳定。

    小议以学生为主自学为主的教学方法.doc

    小议以学生为主自学为主的教学方法.doc

    小议电力系统中的谐波分析方法.pdf

    对于谐波的分析方法,文中重点讨论了频域分析法。频域分析法是将连续时间域的系统元件转换到频率域,通过分析各个频率点上的响应,进而得到整个网络的分析结果。这种方法允许我们分别处理不同频率的谐波,建立等效...

    抖动算法小议

    ### 抖动算法小议——深入探讨多媒体技术中图像的抖动算法 #### 引言 在多媒体领域,尤其是在图像处理技术中,抖动算法扮演着至关重要的角色。本文旨在通过对抖动算法的深入解析,帮助读者理解其原理及其在灰度...

    小议经济型酒店消费者心理及消费方向.doc

    小议经济型酒店消费者心理及消费方向.doc

    小议外汇期权会计在新规则中应用.doc

    小议外汇期权会计在新规则中应用 本文主要探讨了小议外汇期权会计在新规则中的应用,涉及到外汇期权的概念、分类、确认、计量和披露等方面的知识点。 一、外汇期权的概念 外汇期权是一种金融衍生工具,允许持有人...

    小议MVC模式开发

    **小议MVC模式开发** MVC(Model-View-Controller)模式是软件工程中的一种设计模式,广泛应用于Web应用程序的开发中,特别是在Java、.NET等框架中。该模式将应用程序分为三个主要部分,旨在实现业务逻辑与用户界面...

    小议iOS内存管理-中文.pdf

    这里,`[ClassA alloc]`命令实质上是在请求系统为`ClassA`类型的对象分配内存,并返回指向这块内存的指针。随后,`init`方法被调用以初始化对象,最终将初始化后的对象指针赋值给变量`a`。使用完毕后,需手动调用`...

    小议时序调度Timer和Quartz

    3. 定义Trigger:根据需求选择合适的Trigger类型,如SimpleTrigger或CronTrigger。 4. 创建Scheduler:使用`StdSchedulerFactory`获取Scheduler实例。 5. 注册Job和Trigger:使用Scheduler的`scheduleJob(JobDetail,...

    小议电力系统负荷预测的基本原理及方法.pdf

    1. 时间序列法:这种方法通过对历史负荷数据进行分析,提取出基本负荷、天气敏感负荷和特殊事件负荷,然后预测剩余的随机负荷部分。BOI-Jenk的时间序列法是其中一种广泛应用的技术。 2. 卡尔曼滤波分析法:通过建立...

Global site tag (gtag.js) - Google Analytics