假设我有任何变量,定义如下:
var a = function() {/* Statements */};
Run Code Online (Sandbox Code Playgroud)
我想要一个函数来检查变量的类型是否像函数一样.即:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
Run Code Online (Sandbox Code Playgroud)
如何以上面定义的方式检查变量a是否类型Function?
是否有任何重要的使用理由
typeof variable === 'function'
Run Code Online (Sandbox Code Playgroud)
与
!!variable.call
Run Code Online (Sandbox Code Playgroud)
用于检测变量是否是函数?
除了显而易见的人之外可能会创建一个对象:
{ call: 1 }
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是
typeof /regex/ === 'function'
Run Code Online (Sandbox Code Playgroud)
返回true,但是
!!/regex/.call
Run Code Online (Sandbox Code Playgroud)
返回false
我需要检查用户指定的谓词总是返回一个布尔值.示例代码如下所示:
let isMostlyBoolean = function (aPredicate) {
return ( typeof aPredicate(undefined) === 'boolean' &&
typeof aPredicate(null) === 'boolean' &&
typeof aPredicate(false) === 'boolean' &&
typeof aPredicate(Number.NaN) === 'boolean' &&
typeof aPredicate(256) === 'boolean' &&
typeof aPredicate("text") === 'boolean' &&
typeof aPredicate('s') === 'boolean' &&
typeof aPredicate(Math.sqrt) === 'boolean' &&
typeof aPredicate(Object) === 'boolean' &&
typeof aPredicate(['x', 'y', 'z']) === 'boolean'
);
}
Run Code Online (Sandbox Code Playgroud)
哪个有效.有更整洁和/或更有效的aPredicate检查方式吗?在这里,我们逐个扫描所有可能的数据类型.
如_.isFunction(a)与==='function'的类型所述?javascript讨论typeof应该是要走的路.任何想法如何以更花哨和可读的方式做到这一点?
编辑:注意上面的测试是一种模糊逻辑.功能名称已相应更改.请参阅下面的@georg评论等.
鉴于测试代码:
let prediLess = (x) => x<2; …Run Code Online (Sandbox Code Playgroud)