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
  • asp之家 网络编程 m.aspxhome.com