1# 使用JSVM-API接口进行Wellknown symbols相关开发 2 3## 简介 4 5JSVM-API中Well-known symbols相关接口可以通过不同API直接拿到对应的11个Well-known symbols。 6 7## 基本概念 8 9在JSVM-API中,Well-known symbols相关接口能够给用户提供快速获取对应的11个Well-known symbols的能力。 10 11## 接口说明 12 13| 接口 | 功能说明 | 14|----------------------------------------|--------------------------------| 15| OH_JSVM_GetSymbolToStringTag | 等价于JS中的Symbol.toStringTag。 | 16| OH_JSVM_GetSymbolToPrimitive | 等价于JS中的Symbol.toPrimitive。 | 17| OH_JSVM_GetSymbolSplit | 等价于JS中的Symbol.split。 | 18| OH_JSVM_GetSymbolSearch | 等价于JS中的Symbol.search。 | 19| OH_JSVM_GetSymbolReplace | 等价于JS中的Symbol.replace。 | 20| OH_JSVM_GetSymbolMatch | 等价于JS中的Symbol.match。 | 21| OH_JSVM_GetSymbolIsConcatSpreadable | 等价于JS中的Symbol.isConcatSpreadable。 | 22| OH_JSVM_GetSymbolHasInstance | 等价于JS中的Symbol.hasInstance。 | 23| OH_JSVM_GetSymbolUnscopables | 等价于JS中的Symbol.unscopables。 | 24| OH_JSVM_GetSymbolAsyncIterator | 等价于JS中的Symbol.asyncIterator。 | 25| OH_JSVM_GetSymbolIterator | 等价于JS中的Symbol.iterator。 | 26 27## 使用示例 28 29JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅对接口对应C++相关代码进行展示。 30 31### 使用接口获取Well-known symbols(以OH_JSVM_GetSymbolToStringTag为例) 32 33cpp部分代码 34 35```cpp 36static JSVM_Value WellKnownSymbols(JSVM_Env env, JSVM_CallbackInfo info) { 37 JSVM_VM vm; 38 OH_JSVM_GetVM(env, &vm); 39 40 JSVM_HandleScope handleScope; 41 OH_JSVM_OpenHandleScope(env, &handleScope); 42 string src = R"JS(Symbol.toStringTag)JS"; 43 JSVM_Value jsSrc; 44 JSVM_Script script; 45 JSVM_Value result1; 46 47 OH_JSVM_CreateStringUtf8(env, src.c_str(), JSVM_AUTO_LENGTH, &jsSrc); 48 OH_JSVM_CompileScript(env, jsSrc, nullptr, 0, true, nullptr, &script); 49 OH_JSVM_RunScript(env, script, &result1); 50 JSVM_Value result2; 51 OH_JSVM_GetSymbolToStringTag(env, &result2); 52 bool is_equals = false; 53 OH_JSVM_StrictEquals(env, result1, result2, &is_equals); 54 OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_GetSymbolToStringTag result is correct : %{public}d\n", is_equals); 55 OH_JSVM_CloseHandleScope(env, handleScope); 56 57 return nullptr; 58} 59 60static JSVM_CallbackStruct param[] = { 61 {.data = nullptr, .callback = WellKnownSymbols}, 62}; 63 64static JSVM_CallbackStruct *method = param; 65 66// wellKnownSymbols方法别名,供JS调用 67static JSVM_PropertyDescriptor descriptor[] = { 68 {"wellKnownSymbols", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT}, 69}; 70 71// 样例测试JS 72const char *srcCallNative = R"JS(wellKnownSymbols();)JS"; 73 74``` 75 76预期输出 77``` 78JSVM OH_JSVM_GetSymbolToStringTag result is correct : 1 79``` 80