当argv不为nullptr时,napi_get_cb_info会根据argc声明的数量将JS实际传入的参数写入argv。我在学习鸿蒙中,遇到了一个问题怎么理解呢?
harmonyos
如果argc小于等于实际JS传入参数的数量,该接口仅会将声明的argc数量的参数写入argv;而当argc大于实际参数数量时,该接口会在argv的尾部填充undefined。有没有相关介绍这个问题的呢?
您需要先 登录 才能评论/回答
全部评论(1)
Node-API开发规范
获取JS传入参数及其数量
【规则】 当传入napi_get_cb_info的argv不为nullptr时,argv的长度必须大于等于传入argc声明的大小。
当argv不为nullptr时,napi_get_cb_info会根据argc声明的数量将JS实际传入的参数写入argv。如果argc小于等于实际JS传入参数的数量,该接口仅会将声明的argc数量的参数写入argv;而当argc大于实际参数数量时,该接口会在argv的尾部填充undefined。
错误示例
static napi_value IncorrectDemo1(napi_env env, napi_callback_info info) {
// argc 未正确的初始化,其值为不确定的随机值,导致 argv 的长度可能小于 argc 声明的数量,数据越界。
size_t argc;
napi_value argv[10] = {nullptr};
napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
return nullptr;
}
static napi_value IncorrectDemo2(napi_env env, napi_callback_info info) {
// argc 声明的数量大于 argv 实际初始化的长度,导致 napi_get_cb_info 接口在写入 argv 时数据越界。
size_t argc = 5;
napi_value argv[3] = {nullptr};
napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
return nullptr;
}
正确示例
static napi_value GetArgvDemo1(napi_env env, napi_callback_info info) {
size_t argc = 0;
// argv 传入 nullptr 来获取传入参数真实数量
napi_get_cb_info(env, info, &argc, nullptr, nullptr, nullptr);
// JS 传入参数为0,不执行后续逻辑
if (argc == 0) {
return nullptr;
}
// 创建数组用以获取JS传入的参数
napi_value* argv = new napi_value[argc];
napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
// 业务代码
// ... ...
// argv 为 new 创建的对象,在使用完成后手动释放
delete[] argv;
return nullptr;
}
static napi_value GetArgvDemo2(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value argv[2] = {nullptr};
// napi_get_cb_info 会向 argv 中写入 argc 个 JS 传入参数或 undefined
napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
// 业务代码
// ... ...
return nullptr;
}
2026-08-23 01:10:15