在javascriptcore中,我们可以使用以下代码生成数组对象:
JSObjectRef array = JSObjectMakeArray(ctx, 0, NULL, NULL)
还有JSObjectMakeString
/ JSObjectMakeNumber
之类的函数来生成JSObjectRef对象,因此在使用对象时,我找不到像JSObjectIsArray这样的方法来检查对象类型,但是在JSValueRef
下有JSValueIsString / JSValueIsNumber方法。
那么如何检查obj是否是一个数组?
答案 0 :(得分:3)
要检查对象是否是带有JavaScript的数组,您可以使用Array.isArray(obj)
(对于支持它的浏览器),如JavaScriptCore实现它,您可以编写自己的JSValueIsArray
函数,如下所示:< / p>
bool JSValueIsArray(JSContextRef ctx, JSValueRef value)
{
if (JSValueIsObject(ctx, value))
{
JSStringRef name = JSStringCreateWithUTF8CString("Array");
JSObjectRef array = (JSObjectRef)JSObjectGetProperty(ctx, JSContextGetGlobalObject(ctx), name, NULL);
JSStringRelease(name);
name = JSStringCreateWithUTF8CString("isArray");
JSObjectRef isArray = (JSObjectRef)JSObjectGetProperty(ctx, array, name, NULL);
JSStringRelease(name);
JSValueRef retval = JSObjectCallAsFunction(ctx, isArray, NULL, 1, &value, NULL);
if (JSValueIsBoolean(ctx, retval))
return JSValueToBoolean(ctx, retval);
}
return false;
}
答案 1 :(得分:3)
我发现了一些其他的数组操作,我想在这里粘贴代码以帮助其他人。
获取数组长度:
int JSArrayGetCount(JSContextRef ctx, JSObjectRef arr)
{
JSStringRef pname = JSStringCreateWithUTF8CString("length");
JSValueRef val = JSObjectGetProperty(ctx, arr, pname, NULL);
JSStringRelease(pname);
return JSValueToNumber(ctx, val, NULL);
}
按索引获取数组元素:
JSValueRef JSArrayGetValueAtIndex(JSContextRef ctx, JSObjectRef arr, int index)
{
return JSObjectGetPropertyAtIndex(ctx, arr, index, NULL);
}