1# 使用JSVM-API接口进行Wrapper object相关开发 2 3## 简介 4 5JSVM-API中装箱类型(Wrapper object)判断相关接口可以通过不同API对object的装箱类型进行快速判断。 6 7## 基本概念 8 9在JSVM-API中,装箱类型相关接口能够给用户提供快速判断5个不同装箱类型能力。 10 11## 接口说明 12 13| 接口 | 功能说明 | 14|----------------------------------------|--------------------------------| 15| OH_JSVM_IsNumberObject | 判断是否是Number Object。 | 16| OH_JSVM_IsBooleanObject | 判断是否是Boolean Object。 | 17| OH_JSVM_IsBigIntObject | 判断是否是BigInt Object。 | 18| OH_JSVM_IsStringObject | 判断是否是String Object。 | 19| OH_JSVM_IsSymbolObject | 判断是否是Symbol Object。 | 20 21## 使用示例 22 23JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅对接口对应C++相关代码进行展示。 24 25### 使用接口判断是否是Number Object 26 27cpp部分代码 28 29```cpp 30static JSVM_Value WrapperObject(JSVM_Env env, JSVM_CallbackInfo info) { 31 JSVM_VM vm; 32 OH_JSVM_GetVM(env, &vm); 33 34 JSVM_HandleScope handleScope; 35 OH_JSVM_OpenHandleScope(env, &handleScope); 36 string src = R"JS(new Number(42))JS"; 37 JSVM_Value jsSrc; 38 JSVM_Script script; 39 JSVM_Value result; 40 41 OH_JSVM_CreateStringUtf8(env, src.c_str(), JSVM_AUTO_LENGTH, &jsSrc); 42 OH_JSVM_CompileScript(env, jsSrc, nullptr, 0, true, nullptr, &script); 43 OH_JSVM_RunScript(env, script, &result); 44 bool isNumberObject = false; 45 OH_JSVM_IsNumberObject(env, result, &isNumberObject); 46 OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_IsNumberObject: %{public}d\n", isNumberObject); 47 OH_JSVM_CloseHandleScope(env, handleScope); 48 49 return nullptr; 50} 51 52static JSVM_CallbackStruct param[] = { 53 {.data = nullptr, .callback = WrapperObject}, 54}; 55 56static JSVM_CallbackStruct *method = param; 57 58// wrapperObject方法别名,供JS调用 59static JSVM_PropertyDescriptor descriptor[] = { 60 {"wrapperObject", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT}, 61}; 62 63// 样例测试JS 64const char *srcCallNative = R"JS(wrapperObject();)JS"; 65 66``` 67 68预期输出 69``` 70JSVM OH_JSVM_IsNumberObject: 1 71``` 72