假设我有一个变量,其定义如下:
var a = function() {/* Statements */};
我希望有一个函数可以检查变量的类型是否类似于函数。例如:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
我如何检查变量 a
是否为上述定义的 Function
类型?
假设我有一个变量,其定义如下:
var a = function() {/* Statements */};
我希望有一个函数可以检查变量的类型是否类似于函数。例如:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
我如何检查变量 a
是否为上述定义的 Function
类型?
请注意:
这个。typeof Object === "function" // true.
typeof Array === "function" // true
Object
和Array
都是构造函数,尽管它们共享一些静态方法,你可能想要使用,但几乎没有人会像那样检查它们的类型。有什么原因会发生这种情况吗?目前我想不出除了程序员错误之外的任何原因。 - Shapetypeof arg === 'function'
,可以在这里看到。
arg instanceof Function
,它会返回一个布尔值// It doesn't really matter if you use named function or not - but that is cool to know that it can have a name :)
let f = function aNamedFunction(){console.log('hello')};
f.prototype = null;
console.log(f instanceof Function, typeof f); // true, function
f.__proto__ = null;
console.log(f instanceof Function); // false, function
console.log(Object.getOwnPropertyNames(f)); // prototype, length, name
f(); // 'hello'
typeof arg === 'function'
看起来很不错(尽管有一些特殊情况可能会失败)。
isES3Function
,可以检测传入的value
是否是在ES3中独有的函数类型,而isGenericFunction
则可以检测传入的value
是否是一个通用的(或者说不具体/非具体)函数,因此可以是一个传统的ES3函数或者一个非异步箭头函数。 - undefined