假设有任意变量,定义如下:

var a = function() {/* Statements */};

我想要一个函数来检查变量的类型是否为类函数。例如:

function foo(v) {if (v is function type?) {/* do something */}};
foo(a);

我怎样才能检查变量a是否为上述定义的函数类型?


当前回答

下面的代码似乎也适用于我(从node.js测试):

var isFunction = function(o) {
     return Function.prototype.isPrototypeOf(o);
};

console.log(isFunction(function(){})); // true
console.log(isFunction({})); // false

其他回答

下面的代码似乎也适用于我(从node.js测试):

var isFunction = function(o) {
     return Function.prototype.isPrototypeOf(o);
};

console.log(isFunction(function(){})); // true
console.log(isFunction({})); // false

从节点v0.11开始,你可以使用标准的util函数:

var util = require('util');
util.isFunction('foo');

@grandecomplex:你的解决方案相当冗长。如果这样写会更清楚:

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

当然,下划线的方式更有效率,但当效率不是问题时,最好的检查方法是在@Paul Rosania的下划线页面上写的。

受下划线的启发,最后的isFunction函数如下:

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

注意:此解决方案不适用于异步函数、生成器或代理函数。请参阅其他答案,以了解更多最新的解决方案。

jQuery(3.3版已弃用)参考

$.isFunction(functionName);

AngularJS参考

angular.isFunction(value);

Lodash参考

_.isFunction(value);

强调参考

_.isFunction(object); 

Node.js自v4.0.0参考版起已弃用

var util = require('util');
util.isFunction(object);