大多数情况下,typeof就可以完成检查函数类型的工作,例如:
function ninja(){}
alert(typeof ninja);
但是根据浏览器的不同,我们可以发现以下集中情况
- 在firefox2和firefox3中,如果检测一个<object/>类型的元素,将会检测出来是一个function
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<mce:script type="text/javascript"><!--
window.onload=function(){
var o=document.getElementById("doc_html");
alert(typeof o);
}
// --></mce:script>
</head>
<body>
<object id="doc_html" name="doc_html" style="LEFT: 0px; TOP: 0px" data=" gledit.htm" width=530 height=320 type=text/x-scriptlet VIEWASTEXT></object>
</body>
</html> - firefox2正则表达式会被认为是一个function;但是在firefox3中会被认为是object
- IE6和IE7中一些dom元素的方法会被认为一个object
//typeof /test/=='function' - safari3中认为NodeList为function如:typeof document.body.childNodes =="function"
纵观以上所有情况,我们可以写出一个通用的函数来检测某个值是否是函数
function isFunction( fn ) {
return !!fn && !fn.nodeName && fn.constructor != String &&
fn.constructor != RegExp && fn.constructor != Array &&
/function/i.test( fn + "" );
}
时间: 2024-11-06 07:33:33