Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将v8值转换为数组 我正在写一个C++扩展到V8,并希望把数组对象传递给它。我看到传入的参数可以通过IsArray()进行测试,但是没有ToArray()_Javascript_C++_V8 - Fatal编程技术网

Javascript 如何将v8值转换为数组 我正在写一个C++扩展到V8,并希望把数组对象传递给它。我看到传入的参数可以通过IsArray()进行测试,但是没有ToArray()

Javascript 如何将v8值转换为数组 我正在写一个C++扩展到V8,并希望把数组对象传递给它。我看到传入的参数可以通过IsArray()进行测试,但是没有ToArray(),javascript,c++,v8,Javascript,C++,V8,如何访问其长度,并通过数字索引请求元素 Handle<Value> MyExtension(const Arguments& args) { Handle<Value> v = args[0]; if(v->IsArray()) { // convert to array, find its length, and access its members by index... ? } ... } handle

如何访问其长度,并通过数字索引请求元素

Handle<Value> MyExtension(const Arguments& args)
{
    Handle<Value> v = args[0];
    if(v->IsArray())
    {
        // convert to array, find its length, and access its members by index... ?
    }
...
}
handlemyExtension(常量参数和参数)
{
句柄v=args[0];
如果(v->IsArray())
{
//转换为数组,查找其长度,并通过索引访问其成员?
}
...
}
这里肯定少了什么明显的东西。对象可以返回其所有属性,但这并不是我所希望的。有没有办法让它成为一个Arrray


感谢阅读。

您应该使用句柄的
转换方法将其转换为其他类型:

v8::Handle<v8::Array> array = v8::Handle<v8::Array>::Cast(v);
v8::Handle数组=v8::Handle::Cast(v);

我找不到转换或强制转换为数组的方法。也许有办法。但是我发现,通过执行
object->IsArray()
object->get(“length”)->Uint32Value()
,以及
object->get(int)
,我可以在数组中漫游

v8::Handle<v8::Object> obj;
// ... init obj from arguments or wherever ...

int length = 0;
if(obj->IsArray())
{
    length = obj->Get(v8::String::New("length"))->ToObject()->Uint32Value();
}

for(int i = 0; i < length; i++)
{
    v8::Local<v8::Value> element = obj->Get(i);
    // do something with element
}
v8::handleobj;
// ... 从参数或任何地方初始化obj。。。
整数长度=0;
if(obj->IsArray())
{
length=obj->Get(v8::String::New(“length”)->ToObject()->Uint32Value();
}
for(int i=0;iGet(i);
//用元素做些什么
}

我能够让事情像这样运行,这只是Vyacheslav Egorov给出的答案的一个变体

Local<Array> arr= Local<Array>::Cast(args[0]);
printf("size %d\n",arr->Length());
Local<Value> item = arr->Get(0);
Local arr=Local::Cast(args[0]);
printf(“大小%d\n”,arr->Length());
本地项目=arr->Get(0);

以下是我的成功代码

v8::Handle<v8::Value> obj(args[0]);

 if(obj->IsArray()){

     v8::Local<v8::Array> arr= v8::Local<v8::Array>::Cast(args[0]);
     v8::String::Utf8Value key(arr->Get(0));
     v8::String::Utf8Value value(arr->Get(1));

 }
v8::handleobj(args[0]);
if(obj->IsArray()){
v8::Local arr=v8::Local::Cast(args[0]);
v8::String::Utf8Value键(arr->Get(0));
v8::String::Utf8Value值(arr->Get(1));
}

这似乎很接近!但我得到了一个强制转换错误:错误C2440:“=”:无法从“v8::Value*”转换为“v8::Object*volatile”。我现在想知道我是否只需要自己读取.length属性……这非常奇怪。我知道,如果
v
Handle
,那么上面这一行必须编译得很好,因为
Cast
就是这样使用的。编译错误指向哪里?你能发布你的源代码吗?这是很久以前的事了,但不应该
args[0]->ToObject.As()玩这个把戏?