使用Nan在Node.js插件代码中创build数组

我正在编写Node add-on,尽可能使用nan库来编写代码。 Node项目推荐使用它,因为它可以让您编写与不同版本的v8和节点兼容的代码。

然而,经过多次查看他们的文档 ,我还没有find任何有关在nan API中处理数组的指导。 对于像JavaScript代码那样处理作为parameter passing数组的基本任务,或者在插件中实例化新的数组对象并将其返回给Javascript代码。 我们是否应该直接使用v8::Array API。 我希望API的Nan :: New部分能够更好地处理这个问题。

我错过了什么吗?

如果你看看V8的文档 ,你会发现v8::Arrayv8::Object一个子集。 鉴于此,你可以创build一个数组

 Nan::New<v8::Array>(); 

您可以参考v8::Array文档以获取更多详细信息。

寻找解决一些相关的问题我发现这个存储库有一些非常好的工作示例。

我只是指出arrays相关的转换这里快速参考。

在参数中接收数组:

 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 

具体的解决scheme可以在这里find。