假设我有任何变量,定义如下:
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