假设有任意变量,定义如下:
var a = function() {/* Statements */};
我想要一个函数来检查变量的类型是否为类函数。例如:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
我怎样才能检查变量a是否为上述定义的函数类型?
假设有任意变量,定义如下:
var a = function() {/* Statements */};
我想要一个函数来检查变量的类型是否为类函数。例如:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
我怎样才能检查变量a是否为上述定义的函数类型?
当前回答
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);
其他回答
从节点v0.11开始,你可以使用标准的util函数:
var util = require('util');
util.isFunction('foo');
if (typeof v === 'function') {
// do something
}
js使用了一个更精细但高性能的测试:
_.isFunction = function(obj) {
return !!(obj && obj.constructor && obj.call && obj.apply);
};
参见:https://jsben.ch/B6h73
编辑:更新的测试表明typeof可能更快,参见https://jsben.ch/B6h73
如果你正在寻找一个简单的解决方案:
function isFunction(value) {
return value instanceof Function
}
当然,下划线的方式更有效率,但当效率不是问题时,最好的检查方法是在@Paul Rosania的下划线页面上写的。
受下划线的启发,最后的isFunction函数如下:
function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}
注意:此解决方案不适用于异步函数、生成器或代理函数。请参阅其他答案,以了解更多最新的解决方案。