很多刚接触 JavaScript 的程序员不知道可以把一个函数赋值给一个变量。我们可以把这个变量作为参数传递到另外的函数里,这时这个函数可以称之为回调函数。
在项目开发中回调函数是不可避免的,在涉及到异步操作时是绕不开的话题。我们需要确保传递进来的参数是一个有效的函数,才会进行下一步的处理。
在本文中,我们将介绍几种检查变量是否是函数的方式,以及它们各自的优缺点。
1.typeof 操作符
typeof 操作符返回一个字符串,表示右侧操作数的类型。对于函数来说,会返回字符串 “function”。
这种方式适用于各种函数,例如命名的函数,赋值到变量的函数,箭头函数等。示例代码如下:
这种方式很简洁,不过需要注意:部分浏览器存在 bug,对于 HTML 的 object 元素和 embed 元素上运行 typeof 会返回 “function”。例如在 Chrome 57 上:
在 jQuery 是这样处理的,除了用 typeof 之外,还判断了变量的 nodeType 属性是否为一个数字。
2.正则表达式匹配
这种方式利用了正则表达式强大的功能,把变量转成字符串,然后检查其中是否含有 “function”单词。如下:
这种方式可以处理大多数的情况,但是不能正确识别箭头函数和异步函数,对于特殊的对象也会误认为是函数:
3.toString() 方法
可以使用 toString() 方法检查一个变量的类型,它会获得变量的字符串表现形式,然后和字符串 ‘[object Function]’进行比对。不过这种方式不可靠,不能正确识别 ES 6 的 class 和异步函数。
领取专属 10元无门槛券
私享最新 技术干货