摘要:来实现,这个函数可以获得对象的内部属性,函数执行过程如下使用方法如下参考资料
怎么判断一个对象是一个函数呢?一般情况下,我们都是使用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),函数执行过程如下:
Get the [[Class]] property of this object.
Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
Return Result (2)
使用方法如下:
function isFunction(fn) { return Object.prototype.toString.call(fn)=== "[object Function]"; }
参考资料Object.prototype.toString() - JavaScript | MDN
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85684.html
摘要:文中的多为构造函数原型对象属性为函数的专属属性,表示函数的原型对象。关于各种数据类型的属性的展示对象的构造器函数该属性指向创建该对象原型的构造函数。对对象的冻结状态的设置和判断,前者让冻结对象,后者判断对象是否被冻结。 前言 上篇文章介绍了JS的对象,本文将介绍Object这个基类,主要介绍其属性和方法(其实这些在MDN里都有^_^,点击这里可以直通MDN)。好了废话不多说了,直接开始...
摘要:中常常会看到这种代码变量与的比较这种用法很有问题用来判断变量是否被赋予了一个合理的值比如不好的写法执行一些逻辑这段代码中方法显然是希望是一个数组因为我们看到的拥有和这段代码的意图非常明显如果参数不是一个数组则停止接下来的操作这种写法的问题在 js中, 常常会看到这种代码: 变量与null的比较(这种用法很有问题), 用来判断变量是否被赋予了一个合理的值. 比如: const Contr...
摘要:在中,要说如果有几乎会在每一个文件都要用到的一个全局函数和一个全局对象,那应该是非和莫属了。它们是模块机制的基石。若仍未返回,则为指定的模块路径依次加上,和,判断是否存在,若存在则返回拼接后的路径。 在 Node.js 中,要说如果有几乎会在每一个文件都要用到的一个全局函数和一个全局对象,那应该是非 require 和 module.exports 莫属了。它们是 Node.js 模块...
摘要:没有清空的原因是,内部函数返回的匿名函数的作用域链仍然保有对外部函数的变量的引用。在作用域链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位,直至作为作用域链终点的全局执行环境。 前言 闭包这个概念几乎成了JavaScript面试者必问的话题之一,可以毫不客气地说对闭包的理解和运用体现了一名js工程师的功底。那么闭包到底是什么,它又能带来什么特别的作用?网上...
阅读 3116·2023-04-25 19:09
阅读 3845·2021-10-22 09:54
阅读 1693·2021-09-29 09:35
阅读 2859·2021-09-08 09:45
阅读 2171·2021-09-06 15:00
阅读 2737·2019-08-29 15:32
阅读 1010·2019-08-28 18:30
阅读 344·2019-08-26 13:43