假设有任意变量,定义如下:
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是否为上述定义的函数类型?
当前回答
有更多的浏览器支持,也包括异步函数可以是:
const isFunction = value => value && (Object.prototype.toString.call(value) === "[object Function]" || "function" === typeof value || value instanceof Function);
然后像这样测试它:
isFunction(isFunction); //true
isFunction(function(){}); //true
isFunction(()=> {}); //true
isFunction(()=> {return 1}); //true
isFunction(async function asyncFunction(){}); //true
isFunction(Array); //true
isFunction(Date); //true
isFunction(Object); //true
isFunction(Number); //true
isFunction(String); //true
isFunction(Symbol); //true
isFunction({}); //false
isFunction([]); //false
isFunction("function"); //false
isFunction(true); //false
isFunction(1); //false
isFunction("Alireza Dezfoolian"); //false
其他回答
如果你使用Lodash,你可以用_.isFunction来实现。
_.isFunction(function(){});
// => true
_.isFunction(/abc/);
// => false
_.isFunction(true);
// => false
_.isFunction(null);
// => false
如果value是一个函数,该方法返回true,否则返回false。
我发现在测试IE8中的本地浏览器功能时,使用toString、instanceof和typeof都不能工作。下面是一个在IE8中运行良好的方法(据我所知):
function isFn(f){
return !!(f && f.call && f.apply);
}
//Returns true in IE7/8
isFn(document.getElementById);
或者,您可以使用以下方法检查本机函数:
"getElementById" in document
不过,我在某个地方读到过,这在IE7及以下版本并不总是有效。
@grandecomplex:你的解决方案相当冗长。如果这样写会更清楚:
function isFunction(x) {
return Object.prototype.toString.call(x) == '[object Function]';
}
有更多的浏览器支持,也包括异步函数可以是:
const isFunction = value => value && (Object.prototype.toString.call(value) === "[object Function]" || "function" === typeof value || value instanceof Function);
然后像这样测试它:
isFunction(isFunction); //true
isFunction(function(){}); //true
isFunction(()=> {}); //true
isFunction(()=> {return 1}); //true
isFunction(async function asyncFunction(){}); //true
isFunction(Array); //true
isFunction(Date); //true
isFunction(Object); //true
isFunction(Number); //true
isFunction(String); //true
isFunction(Symbol); //true
isFunction({}); //false
isFunction([]); //false
isFunction("function"); //false
isFunction(true); //false
isFunction(1); //false
isFunction("Alireza Dezfoolian"); //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);