Javascript教程:判断函数类型
Javascript函数类型判断完美解决方案 在判断函数类型时,我们通常使用typeof方法,一般情况下,它会得到我们所预想的效果。但是,有一些细节并不为我们所熟知。John Resig 在分析了这些细节之后,为我们提供了一个完美的解决方案,本文将作详细介绍: 一、传统方法不为人所知的细节 毫无疑问,在判断函数类型时,我们使用的是typeof方法,比如: function fn(){ 但是,该方法在一些浏览器中并不是像我们想像的那样工作。 1、Firefox2和Firefox3 在这两个浏览器中,用typeof检测HTML对象元素的类型,得到是一个不精确的“function”结果,而不是“object”,如HTMLDocument。如: alert(typeof HTMLDocument); 2、Firefox2 对于正则表达式,在该浏览器中返回的结果是“function”(在Firefox3中结果是“object”),如: var reg = /test/; 注:本人在safari中测试,其结果也是“function”。 3、IE6和IE7 在IE中对DOM元素使用typeof方法,得到的结果是“object”。如: alert(typeof document.getElementsByTagName("body")[0].getAttribute); 4、Safari 3 safari认为DOM元素的NodeList是一个函数,如: alert(typeof document.body.childNodes); 很明显,如果你要测试一个对象是否为函数,使用typeof方法并不能从真正意义上保证测试结果。那么,我们就需要一种在所有浏览器中都能保证测试结果的解决方案。我们知道function本身有apply()和call()两种方法,但这两个方法在IE中存在问题的函数中并不存在,试试下面的测试: alert(typeof document.getElementsByTagName("body")[0].getAttribute.call) 显然,我们不能利用这两个方法。 二、完美解决方案及实现过程 John Resig为我们提供了一个完美的解决方案,这个复杂但很稳定的判断一个对象是否为函数的方法如下: function isFunction( fn ) { |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |