如何检查jsvalue是否是函数



我正在使用JavaScriptCore与Objective-C代码进行交互

JSValue中没有iSFunction方法,但是我想检查JSValue是否是JS函数,并从Objective-C

调用它

我最终注入了一个小的JavaScript代码,以返回typeof

的结果
[context evaluateScript:@"function is(obj){ return typeof obj }"];
JSValue *is = [[context globalObject] valueForProperty:@"is"];
JSValue *type = [is callWithArguments:@[ is ]];

看起来没有办法检查。您只能检查您的函数是一个对象(在JS功能中是对象(。

根据文档,-[JSValue callWithArguments:]如果该值无法视为JavaScript函数,则返回nil。如果JS函数没有明确返回值,则它隐式返回JavaScript值undefined。因此,看起来您只需尝试调用JS功能并处理案例,如果返回nil

一个不创建任何全局对象的单线线:

// evaluates to true if value is a function, false otherwise
[[value.context evaluateScript:@"(obj) => typeof obj === 'function'"] callWithArguments:@[value]].toBool

最新更新