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
投稿
猜你喜欢
PyQt5每天必学之事件与信号
2021-06-28 11:00:52
Python通过Tesseract库实现文字识别
2023-02-28 13:29:46
详解用Python进行时间序列预测的7种方法
2023-02-14 18:55:34
js 数值项目的格式化函数代码
2023-07-14 16:51:31
使用vue.js写一个tab选项卡效果
2024-04-22 22:23:34
GoLang channel关闭状态相关操作详解
2024-04-26 17:26:52
MybatisPlus如何处理Mysql的json类型
2024-01-27 14:23:19
python中lambda与def用法对比实例分析
2022-06-25 09:20:12
详解.NET数据库连接池
2024-01-20 16:05:59
关于Oracle listener日志解析利器的使用方法
2024-01-13 21:36:59
MySQL主从复制与读写分离原理及用法详解
2024-01-14 21:16:25
Python之Scrapy爬虫框架安装及使用详解
2022-10-02 18:28:20
windows环境下mysql数据库的主从同步备份步骤(单向同步)
2024-01-19 16:53:34
深入理解Sql Server中的表扫描
2024-01-27 09:05:33
php之redis短线重连案例讲解
2023-06-12 13:16:04
JavaScript实现模仿桌面窗口的方法
2024-04-19 10:16:56
mysql 索引使用及优化详情
2024-01-24 16:06:56
在Python中通过threshold创建mask方式
2022-10-22 16:52:49
卷积神经网络经典模型及其改进点学习汇总
2023-07-22 22:15:19
小程序scroll-view组件实现滚动的示例代码
2024-05-11 09:31:42