Javascript函数类型判断解决方案
作者:dishuipiaoxiang 来源:Denis'Blog 时间:2009-08-27 15:32:00
Javascript函数类型判断完美解决方案
在判断函数类型时,我们通常使用typeof方法,一般情况下,它会得到我们所预想的效果。但是,有一些细节并不为我们所熟知。John Resig 在分析了这些细节之后,为我们提供了一个完美的解决方案,本文将作详细介绍:
一、传统方法不为人所知的细节
毫无疑问,在判断函数类型时,我们使用的是typeof方法,比如:
function fn(){
//content
}
alert(typeof fn)//结果是"function"。
但是,该方法在一些浏览器中并不是像我们想像的那样工作。
1、Firefox2和Firefox3
在这两个浏览器中,用typeof检测HTML对象元素的类型,得到是一个不精确的“function”结果,而不是“object”,如HTMLDocument。如:
alert(typeof HTMLDocument);
//在Firefox2中结果是"function";
//在Firefox3中结果是"object";
2、Firefox2
对于正则表达式,在该浏览器中返回的结果是“function”(在Firefox3中结果是“object”),如:
var reg = /test/;
alert(typeof reg);
//在Firefox2中结果是"function";
//在Firefox3中结果是"object";
注:本人在safari中测试,其结果也是“function”。
3、IE6和IE7
在IE中对DOM元素使用typeof方法,得到的结果是“object”。如:
alert(typeof document.getElementsByTagName("body")[0].getAttribute);
//结果是"object"
4、Safari 3
safari认为DOM元素的NodeList是一个函数,如:
alert(typeof document.body.childNodes);
//结果是"function"
很明显,如果你要测试一个对象是否为函数,使用typeof方法并不能从真正意义上保证测试结果。那么,我们就需要一种在所有浏览器中都能保证测试结果的解决方案。我们知道function本身有apply()和call()两种方法,但这两个方法在IE中存在问题的函数中并不存在,试试下面的测试:
alert(typeof document.getElementsByTagName("body")[0].getAttribute.call)
//在IE中结果是"undefined"
显然,我们不能利用这两个方法。
标签:函数,类型,JavaScript
0
投稿
猜你喜欢
js用星投票的示例代码
2007-12-29 13:11:00
CSS hack:区分IE6,IE7,firefox
2007-12-23 10:25:00
MYSQL和ORACLE的一些操作区别
2008-12-18 14:33:00
让ASP也支持动态include文件
2008-05-08 13:00:00
对SQL Server聚集索引的指示综合描述
2010-08-31 14:25:00
在js中的replace方法详解
2007-08-21 15:47:00
用VB生成DLL封装ASP代码一个例子:连接access数据库等
2008-04-07 13:06:00
如何用拦截表单的方法上传图片?
2010-06-16 09:50:00
关于web标准的思考
2008-10-05 10:07:00
中国传统色彩名录
2007-11-29 18:36:00
MySQL (root@%) does not exist的问题
2011-03-16 15:31:00
asp如何制作一个倒计时的程序?
2010-06-29 21:25:00
CSS中写expression可能会在Chrome中有问题
2010-01-29 13:10:00
分析描述CentOS mysql安装系统
2010-10-25 20:34:00
5个CSS3技术实现设计增强
2009-09-04 17:04:00
FSO组件之驱动器操作asp源码
2010-05-03 10:59:00
设计输入了些什么?
2008-04-02 11:16:00
归纳万恶IE6的HACK方法
2010-02-04 17:17:00
Oracle回滚段的概念,用法和规划及问题的解决
2010-07-26 13:08:00
Oracle中返回结果集的存储过程分享
2012-07-11 15:50:16