如何在JavaScript中判断一个变量是否为函数的最佳方法

3

如何最好地检查一个变量是否是函数?

var cb = function () {
  return;
}

if (!!(cb && cb.constructor && cb.apply)) {
  cb.apply(somevar, [err, res]);
}
//VS
if (!!(cb && 'function' === typeof cb) {
  cb.apply(somevar, [err, res]);
}

2
就像 if(typeof cb == 'function') { ... } 这么简单。 - undefined
2个回答

10
最常见的方法是使用:
(typeof foo === 'function')

但是,如果您想要匹配类似函数的对象(这种情况很少见,但可能很有用),您可以检查该对象是否可调用:

(foo && foo.call && foo.apply)

在大多数情况下,您也可以测试构造函数(类似于 typeof ):
(foo.constructor === Function)

如果你想引发一个异常,你可以:

try {
  foo();
} catch (e) {
  // TypeError: foo is not a function
}

0
我会选择第二个,因为它是最简单、最直观且有效的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接