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