面试题-怎样判断一个对象是不是function?

在JavaScript中,通常使用Object.prototype.toString.apply(obj)=='[object Function]'来检测一个对象是否为函数。然而,Internet Explorer浏览器对某些DOM操作方法和特定内置函数(如alert、confirm)的识别存在异常,可能导致误判。针对这种情况,可以通过正则表达式检查对象的定义字符串以'function'开头,以此来正确识别IE中的函数。这种方式也采用了惰性载入函数以提高代码执行效率。
摘要由CSDN通过智能技术生成

正常情况下,可以直接 Object.prototype.toString.apply(obj)=='[object Function]',就可以判断了,但是iE这个奇葩,它不能正确认识一些dom操作方法,例如document.getElementById,document.appendChild。还有alert,confirm这些方法,如果调用上面这行代码它会返回false。通过alert(typeof alert);//object 可以发现ie把alert当成了对象,事情总是有办法解决的,解决办法就是通过判断传入对象是否是以function开始定义的。应用正则表达式就可以了。(本例还使用了惰性载入函数,减少了每次调用都要去判断if条件的次数,提高了代码的执行效率)

var isFunction=(function(){

if("object"===typeof alert )//说明是ie
{
alert(''+alert);//function alert(){[native code]}
return function(obj){
try{
alert(''+obj);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值