使用Nan在Node.js附加代码中创建数组

时间:2016-10-13 19:34:14

标签: javascript node.js node.js-addon

我正在编写Node插件并尽可能多地使用 nan 库来编写代码。它是Node项目推荐的,因为它允许您编写与不同版本的v8和节点兼容的代码。

然而,经过多次查看documentation之后,我还没有找到有关在nan API中处理数组的任何指导。对于基本任务,例如处理由Javascript代码作为参数传递的数组,或者在加载项中实例化新数组对象并将其返回到Javascript代码。我们是否应该直接使用v8::Array API。我希望API的Nan::New部分可以更好地处理这个问题。

我错过了什么吗?

2 个答案:

答案 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::Arrayv8::Object的子集。鉴于此,您可以使用

创建一个数组
Nan::New<v8::Array>();

您可以参考v8::Array文档了解更多详情。