js中判断是否为一个函数

怎么判断一个对象是一个函数呢?一般情况下,我们都是使用typeof来进行类型判断,但是这个办法并不是想象的那么好用,偶然使用typeof来判断正则表达式时,发现在firefox2中返回的是"object",firefox3中返回"function",特介绍一种稳定的判断方案:


function isFunction(fn) {
    return (!!fn&&!fn.nodename&&fn.constructor!=String&&fn.constructor!=RegExp&&fn.constructor!=Array&&/function/i.test(fn+""));
}

解释:首先判断对象存在,检测是不是DOM元素,constructor指向创建当前对象的构造函数,那么这些fn.constructor!=String&&fn.constructor!=RegExp&&fn.constructor!=Array大家就能明白了吧,最后一个表达式/function/i.test(fn+""),先将fn转换成字符串,类似于"function name(){...}",然后查找字符串中有没有“function”,/i表示查找模式中忽略大小写

看了评论之后,推荐一种更好用的办法,能够判断Array,String,Data,Function,Boolean,Number等类型。Object.prototype.toString()来实现,这个函数可以获得对象的内部属性(class),函数执行过程如下:

  1. Get the [[Class]] property of this object.
  2. Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
  3. Return Result (2)

使用方法如下:


function isFunction(fn) {
   return Object.prototype.toString.call(fn)=== '[object Function]';
}

参考资料Object.prototype.toString() - JavaScript | MDN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值