我的代码将一个 JavaScript 对象传递给一个用 C++ 实现的函数。C++ 代码需要验证每个属性的类型,并在属性缺失或类型错误时提供默认值。
以下代码似乎有效(仅显示整数大小写),但我想知道是否有更直接的方法来处理这个问题。我绝不是该领域的专家,因此欢迎所有改进建议。
int get_integer(
v8::Local<v8::Object> obj,
v8::Local<v8::String> prop,
int default_value = 0) {
if (Nan::Has(obj, prop).FromMaybe(false)) {
Nan::MaybeLocal<v8::Value> v = Nan::Get(obj, prop);
if (!v.IsEmpty()) {
v8::Local<v8::Value> val = v.ToLocalChecked();
if (val->IsInt32() || val->IsNumber()) {
return val->IntegerValue();
}
}
}
return default_value;
}
它由类似于以下的代码调用:
v8::Local<v8::Object> obj = info[0]->ToObject();
v8::Local<v8::String> prop = Nan::New<v8::String>("prop").ToLocalChecked();
int x = get_integer(obj, prop);