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

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

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

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

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


当前回答

尝试instanceof操作符:似乎所有函数都继承自Function类:

// Test data
var f1 = function () { alert("test"); }
var o1 = { Name: "Object_1" };
F_est = function () { };
var o2 = new F_est();

// Results
alert(f1 instanceof Function); // true
alert(o1 instanceof Function); // false
alert(o2 instanceof Function); // false

其他回答

另一种简单的方法:

var fn = function () {}
if (fn.constructor === Function) {
  // true
} else {
  // false
}

如果你使用Lodash,你可以用_.isFunction来实现。

_.isFunction(function(){});
// => true

_.isFunction(/abc/);
// => false

_.isFunction(true);
// => false

_.isFunction(null);
// => false

如果value是一个函数,该方法返回true,否则返回false。

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);
if (typeof v === 'function') {
    // do something
}

注意这一点:

typeof Object === "function" // true.
typeof Array  === "function" // true