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

    原文作者:点不着蚊香
    原文地址: https://segmentfault.com/a/1190000002763235
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞