协慌网

登录 贡献 社区

检查变量是否为函数类型

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

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

我想要一个函数来检查变量的类型是否像函数一样。即:

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

如何以上面定义的方式检查变量a是否为Function类型?

答案

if (typeof v === "function") {
    // do something
}

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

灵感来自下划线,最终的 isFunction 功能如下:

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

Underscore.js使用更精细但高性能的测试:

_.isFunction = function(obj) {
  return !!(obj && obj.constructor && obj.call && obj.apply);
};

请参阅: http//jsperf.com/alternative-isfunction-implementations

编辑:更新的测试表明 typeof 可能更快,请参阅http://jsperf.com/alternative-isfunction-implementations/4