Skip to content

如何判断 JavaScript 变量是否为函数类型

Posted on:2024年7月19日 at 22:25

在 JavaScript 开发中,判断一个变量是否为函数类型是非常常见的需求。以下是几种常用的方法来进行这个判断:

使用 typeof 操作符

最简单也是最常见的方法是使用 typeof 操作符:

function foo(v) {
    if (typeof v === 'function') {
        // 执行一些操作
    }
}

这种方法的优点在于简单明了,但需要注意的是,typeof 对于某些特定对象(例如 ObjectDateString)也会返回 'function'

使用 instanceof 操作符

另一种可靠的方法是使用 instanceof 操作符:

function foo(v) {
    if (v instanceof Function) {
        // 执行一些操作
    }
}

instanceof 操作符在浏览器中的兼容性很好,即使是在较老的 IE 6 中也可以正常工作。然而,这种方法在处理不同上下文(如 iframe)中传递的函数时可能会出现问题。

使用 Object.prototype.toString

可以借鉴 underscore.js 库中的实现,通过 Object.prototype.toString 来判断:

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

虽然这种方法更加可靠,可以处理更多的边缘情况,但相较于前两种方法,它显得不那么直观和简洁。

性能对比

在不同浏览器中的性能表现也有所不同。例如,在 Chrome 中,typeof(obj) === 'function' 是最快的,而在 Firefox 中,obj instanceof Function 则表现更好。因此,选择哪种方法可以根据具体的使用场景和性能需求来决定。