假设我有任何变量,其定义如下。
var a = function() {/* Statements */};
我希望有一个函数来检查该变量的类型是否为类函数,即:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
如何用上面定义的方式检查变量a
是否为函数
类型?
当然,underscore的方法更有效,但当效率不是问题时,最好的检查方法是写在@Paul Rosania链接的underscore页面上。
受underscore的启发,最后的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
EDIT:更新的测试表明typeof可能更快,见http://jsperf.com/alternative-isfunction-implementations/4