我正在编写Node插件并尽可能多地使用 nan 库来编写代码。它是Node项目推荐的,因为它允许您编写与不同版本的v8和节点兼容的代码。
然而,经过多次查看documentation之后,我还没有找到有关在nan API中处理数组的任何指导。对于基本任务,例如处理由Javascript代码作为参数传递的数组,或者在加载项中实例化新数组对象并将其返回到Javascript代码。我们是否应该直接使用v8::Array
API。我希望API的Nan::New部分可以更好地处理这个问题。
我错过了什么吗?
答案 0 :(得分:6)
搜索一些相关问题的解决方案我发现this repository有一些非常好的工作示例。
我只是在这里指出与阵列相关的转换,以便快速参考。
在参数中接收数组:
Local<Array> array = Local<Array>::Cast(args[0]); //args[0] holds the first argument
for (unsigned int i = 0; i < array->Length(); i++ ) {
if (Nan::Has(array, i).FromJust()) {
//assuming the argument is an array of 'double' values, for any other type the following line will be changed to do the conversion
double value = Nan::Get(array, i).ToLocalChecked()->NumberValue();
Nan::Set(array, i, Nan::New<Number>(value + 1));
}
}
返回一个数组:
//Assuming arr is an 'array' of 'double' values
Local<Array> a = New<v8::Array>(3);
Nan::Set(a, 0, Nan::New(arr[0]));
Nan::Set(a, 1, Nan::New(arr[1]));
Nan::Set(a, 2, Nan::New(arr[2]));
info.GetReturnValue().Set(a); //here 'info' is 'const Nan::FunctionCallbackInfo<v8::Value>& info' received in Nan Method defintion parameter
可以找到具体的解决方案here。
答案 1 :(得分:3)
如果您查看the V8 documentation,您会发现v8::Array
是v8::Object
的子集。鉴于此,您可以使用
Nan::New<v8::Array>();
您可以参考v8::Array
文档了解更多详情。