1# JSVM 2 3 4## 概述 5 6提供标准的JavaScript引擎能力。 7 8功能概述: 标准JS引擎是严格遵守Ecmascript规范的JavaScript代码执行引擎。 支持Ecmascript规范定义的标准库,提供完备的C++交互JS的native API。 通过jit加速代码执行,为应用提供安全、高效的JS执行能力。 标准JS引擎的能力通过一套稳定的ABI,即JSVM-API提供。JSVM-API支持动态链接到不同版本的JS引擎库, 从而为开发者屏蔽掉不同引擎接口的差异。JSVM-API提供引擎生命周期管理、JS context管理、 JS代码执行、JS/C++互操作、执行环境快照、codecache等能力。 9 10使用平台:arm64平台。 11 12使用方法:链接SDK中的libjsvm.so,并在C++代码中包含ark_runtime/jsvm.h头文件。 13 14通过API接口为开发者提供独立、标准、完整的JavaScript引擎能力, 包括管理引擎生命周期、编译运行JS代码、实现JS/C++跨语言调用、拍摄快照等。 15 16**起始版本:** 11 17 18 19## 汇总 20 21 22### 文件 23 24| 名称 | 描述 | 25| -------- | -------- | 26| [jsvm.h](jsvm_8h.md) | 提供JSVM-API接口定义。 | 27| [jsvm_types.h](jsvm__types_8h.md) | 提供JSVM-API类型定义。 | 28 29 30### 结构体 31 32| 名称 | 描述 | 33| -------- | -------- | 34| struct [JSVM_CallbackStruct](_j_s_v_m___callback_struct.md) | 用户提供的native回调函数的指针和数据,这些函数通过JSVM-API接口暴露给JavaScript。 | 35| struct [JSVM_HeapStatistics](_j_s_v_m___heap_statistics.md) | Heapstatisics结构体,用于保存有关JavaScript堆内存使用情况的统计信息。 | 36| struct [JSVM_InitOptions](_j_s_v_m___init_options.md) | 初始化选项,用于初始化JavaScript虚拟机。 | 37| struct [JSVM_CreateVMOptions](_j_s_v_m___create_v_m_options.md) | 创建JavaScript虚拟机的选项。 | 38| struct [JSVM_VMInfo](_j_s_v_m___v_m_info.md) | JavaScript虚拟机信息。 | 39| struct [JSVM_PropertyDescriptor](_j_s_v_m___property_descriptor.md) | 属性描述符。 | 40| struct [JSVM_ExtendedErrorInfo](_j_s_v_m___extended_error_info.md) | 扩展的异常信息。 | 41| struct [JSVM_TypeTag](_j_s_v_m___type_tag.md) | 类型标记,存储为两个无符号64位整数的128位值。 作为一个UUID,通过它,JavaScript对象可以是"tagged", 以确保它们的类型保持不变。 | 42| struct [JSVM_PropertyHandlerConfigurationStruct](_j_s_v_m___property_handler_configuration_struct.md) | 当执行对象的getter、setter、deleter和enumerator操作时,该结构体中对应的函数回调将会触发。 | 43| struct [JSVM_ScriptOrigin](_j_s_v_m___script_origin.md) | Source code information。 | 44| struct [JSVM_PropertyHandler](_j_s_v_m___property_handler.md) | 包含将class作为函数进行调用时所触发的回调函数的函数指针和访问实例对象属性时触发的回调函数的函数指针集。 | 45| struct [JSVM_DefineClassOptions](_j_s_v_m___define_class_options.md) | 定义Class的选项。 | 46 47 48### 宏定义 49 50| 名称 | 描述 | 51| -------- | -------- | 52| **JSVM_VERSION_EXPERIMENTAL** 2147483647 | | 53| **JSVM_VERSION** 8 | | 54| **JSVM_EXTERN** __attribute__((visibility("default"))) | | 55| [JSVM_AUTO_LENGTH](#jsvm_auto_length) SIZE_MAX | 自动长度。 | 56| **EXTERN_C_START** | | 57| **EXTERN_C_END** | | 58| **JSVM_CDECL** | | 59 60 61### 类型定义 62 63| 名称 | 描述 | 64| -------- | -------- | 65| typedef uint16_t **char16_t** | | 66| typedef struct JSVM_VM__ \* [JSVM_VM](#jsvm_vm) | 表示JavaScript虚拟机实例。 | 67| typedef struct JSVM_VMScope__ \* [JSVM_VMScope](#jsvm_vmscope) | 表示JavaScript虚拟机作用域。 | 68| typedef struct JSVM_EnvScope__ \* [JSVM_EnvScope](#jsvm_envscope) | 表示用于控制附加到当前虚拟机实例的环境。只有当线程通过 OH_JSVM_OpenEnvScope进入该环境的JSVM_EnvScope后,该环境才 对线程的虚拟机实例可用。 | 69| typedef struct JSVM_Script__ \* [JSVM_Script](#jsvm_script) | 表示一段JavaScript代码。 | 70| typedef struct JSVM_Env__ \* [JSVM_Env](#jsvm_env) | 表示虚拟机特定状态的上下文环境,需要在调用native函数时作为参数传递, 并且传递给后续任何的JSVM-API嵌套调用。 | 71| typedef struct JSVM_CpuProfiler__ \* [JSVM_CpuProfiler](#jsvm_cpuprofiler) | 表示一个JavaScript CPU时间性能分析器。 | 72| typedef struct JSVM_Value__ \* [JSVM_Value](#jsvm_value) | 表示JavaScript值。 | 73| typedef struct JSVM_Data__ \* [JSVM_Data](#jsvm_data) | 表示一个 JavaScript Data。 | 74| typedef struct JSVM_Ref__ \* [JSVM_Ref](#jsvm_ref) | 表示JavaScript值的引用。 | 75| typedef struct JSVM_HandleScope__ \* [JSVM_HandleScope](#jsvm_handlescope) | 表示JavaScript值的作用域,用于控制和修改在特定范围内创建的对象的生命周期。 通常,JSVM-API值是在JSVM_HandleScope的上下文中创建的。当从JavaScript调用native方法时, 将存在默认JSVM_HandleScope。如果用户没有显式创建新的JSVM_HandleScope,将在默认 JSVM_HandleScope中创建JSVM-API值。对于native方法执行之外的任何代码调用(例如,在libuv回调调用期间), 模块需要在调用任何可能导致创建JavaScript值的函数之前创建一个作用域。JSVM_HandleScope是使用 OH_JSVM_OpenHandleScope创建的,并使用OH_JSVM_CloseHandleScope销毁的。 关闭作用域代表向GC指示在JSVM_HandleScope作用域的生命周期内创建的所有JSVM_Value将不再从当前堆的栈帧中引用。 | 76| typedef struct JSVM_EscapableHandleScope__ \* [JSVM_EscapableHandleScope](#jsvm_escapablehandlescope) | 表示一种特殊类型的handle scope,用于将在特定handle scope内创建的值返回到父作用域。 | 77| typedef struct JSVM_CallbackInfo__ \* [JSVM_CallbackInfo](#jsvm_callbackinfo) | 表示传递给回调函数的不透明数据类型。可用于获取调用该函数的上下文的附加信息。 | 78| typedef struct JSVM_Deferred__ \* [JSVM_Deferred](#jsvm_deferred) | 表示Promise延迟对象。 | 79| typedef [JSVM_CallbackStruct](_j_s_v_m___callback_struct.md) \* [JSVM_Callback](#jsvm_callback) | 用户提供的native函数的函数指针类型,这些函数通过JSVM-API接口暴露给JavaScript。 | 80| typedef void(JSVM_CDECL \* [JSVM_Finalize](#jsvm_finalize)) ([JSVM_Env](#jsvm_env) env, void \*finalizeData, void \*finalizeHint) | 函数指针类型,当native类型对象或数据与JS对象被关联时,传入该指针。该函数将会 在关联的JS对象被GC回收时被调用,用以执行native的清理动作。 | 81| typedef bool(JSVM_CDECL \* [JSVM_OutputStream](#jsvm_outputstream)) (const char \*data, int size, void \*streamData) | ASCII输出流回调的函数指针类型。参数data是指输出的数据指针。参数size是指输出的数据大小。 空数据指针指示流的结尾。参数streamData是指与回调一起传递给API函数的指针,该API函数向输出流生成数据。回 调返回true表示流可以继续接受数据。否则,它将中止流。 | 82| typedef [JSVM_PropertyHandlerConfigurationStruct](_j_s_v_m___property_handler_configuration_struct.md) \* [JSVM_PropertyHandlerCfg](#jsvm_propertyhandlercfg) | 包含属性监听回调的结构的指针类型。 | 83| typedef void(JSVM_CDECL \* [JSVM_HandlerForGC](#jsvm_handlerforgc)) ([JSVM_VM ](#jsvm_vm) vm, [JSVM_GCType](#jsvm_gctype) gcType, [JSVM_GCCallbackFlags](#jsvm_gccallbackflags) flags, void \*data) | GC回调的函数指针类型。 | 84| typedef void(JSVM_CDECL \* [JSVM_HandlerForOOMError](#jsvm_handlerforoomerror)) (const char \*location, const char \*detail, bool isHeapOOM) | OOM-Error回调的函数指针类型。 | 85| typedef void(JSVM_CDECL \* [JSVM_HandlerForFatalError](#jsvm_handlerforfatalerror)) (const char \*location, <br/>const char \*message) | Fatal-Error回调的函数指针类型。 | 86| typedef void(JSVM_CDECL \* [JSVM_HandlerForPromiseReject](#jsvm_handlerforpromisereject)) ([JSVM_Env](#jsvm_env) env, [JSVM_PromiseRejectEvent](#jsvm_promiserejectevent) rejectEvent, [JSVM_Value](#jsvm_value) rejectInfo) | Fatal-Error回调的函数指针类型。 | 87 88 89### 枚举 90 91| 名称 | 描述 | 92| -------- | -------- | 93| [JSVM_PropertyAttributes](#jsvm_propertyattributes) {<br/>JSVM_DEFAULT = 0, JSVM_WRITABLE = 1 << 0, JSVM_ENUMERABLE = 1 << 1, JSVM_CONFIGURABLE = 1 << 2,<br/>JSVM_STATIC = 1 << 10, JSVM_DEFAULT_METHOD = JSVM_WRITABLE \| JSVM_CONFIGURABLE, JSVM_DEFAULT_JSPROPERTY = JSVM_WRITABLE \| JSVM_ENUMERABLE \| JSVM_CONFIGURABLE<br/>} | 用于控制JavaScript对象属性的行为。 | 94| [JSVM_ValueType](#jsvm_valuetype) {<br/>JSVM_UNDEFINED, JSVM_NULL, JSVM_BOOLEAN, JSVM_NUMBER,<br/>JSVM_STRING, JSVM_SYMBOL, JSVM_OBJECT, JSVM_FUNCTION,<br/>JSVM_EXTERNAL, JSVM_BIGINT<br/>} | 描述JSVM_Value的类型。 | 95| [JSVM_TypedarrayType](#jsvm_typedarraytype) {<br/>JSVM_INT8_ARRAY, JSVM_UINT8_ARRAY, JSVM_UINT8_CLAMPED_ARRAY, JSVM_INT16_ARRAY,<br/>JSVM_UINT16_ARRAY, JSVM_INT32_ARRAY, JSVM_UINT32_ARRAY, JSVM_FLOAT32_ARRAY,<br/>JSVM_FLOAT64_ARRAY, JSVM_BIGINT64_ARRAY, JSVM_BIGUINT64_ARRAY<br/>} | 描述TypedArray的类型。 | 96| [JSVM_Status](#jsvm_status) {<br/>JSVM_OK, JSVM_INVALID_ARG, JSVM_OBJECT_EXPECTED, JSVM_STRING_EXPECTED,<br/>JSVM_NAME_EXPECTED, JSVM_FUNCTION_EXPECTED, JSVM_NUMBER_EXPECTED, JSVM_BOOLEAN_EXPECTED,<br/>JSVM_ARRAY_EXPECTED, JSVM_GENERIC_FAILURE, JSVM_PENDING_EXCEPTION, JSVM_CANCELLED,<br/>JSVM_ESCAPE_CALLED_TWICE, JSVM_HANDLE_SCOPE_MISMATCH, JSVM_CALLBACK_SCOPE_MISMATCH, JSVM_QUEUE_FULL,<br/>JSVM_CLOSING, JSVM_BIGINT_EXPECTED, JSVM_DATE_EXPECTED, JSVM_ARRAYBUFFER_EXPECTED,<br/>JSVM_DETACHABLE_ARRAYBUFFER_EXPECTED, JSVM_WOULD_DEADLOCK, JSVM_NO_EXTERNAL_BUFFERS_ALLOWED, JSVM_CANNOT_RUN_JS, JSVM_INVALID_TYPE<br/>} | 表示JSVM-API调用成功或失败的完整状态码。 | 97| [JSVM_KeyCollectionMode](#jsvm_keycollectionmode) { JSVM_KEY_INCLUDE_PROTOTYPES, JSVM_KEY_OWN_ONLY } | 限制查找属性的范围。 | 98| [JSVM_KeyFilter](#jsvm_keyfilter) {<br/>JSVM_KEY_ALL_PROPERTIES = 0, JSVM_KEY_WRITABLE = 1, JSVM_KEY_ENUMERABLE = 1 << 1, JSVM_KEY_CONFIGURABLE = 1 << 2,<br/>JSVM_KEY_SKIP_STRINGS = 1 << 3, JSVM_KEY_SKIP_SYMBOLS = 1 << 4<br/>} | 属性过滤器,可以通过使用or来构造一个复合过滤器。 | 99| [JSVM_KeyConversion](#jsvm_keyconversion) { JSVM_KEY_KEEP_NUMBERS, JSVM_KEY_NUMBERS_TO_STRINGS } | 键转换选项。 | 100| [JSVM_MemoryPressureLevel](#jsvm_memorypressurelevel) { JSVM_MEMORY_PRESSURE_LEVEL_NONE, JSVM_MEMORY_PRESSURE_LEVEL_MODERATE, JSVM_MEMORY_PRESSURE_LEVEL_CRITICAL } | 内存压力水平。 | 101| [JSVM_RegExpFlags](#jsvm_regexpflags) {<br/>JSVM_REGEXP_NONE = 0, JSVM_REGEXP_GLOBAL = 1 << 0, JSVM_REGEXP_IGNORE_CASE = 1 << 1, JSVM_REGEXP_MULTILINE = 1 << 2,<br/>JSVM_REGEXP_STICKY = 1 << 3, JSVM_REGEXP_UNICODE = 1 << 4, JSVM_REGEXP_DOT_ALL = 1 << 5, JSVM_REGEXP_LINEAR = 1 << 6,<br/>JSVM_REGEXP_HAS_INDICES = 1 << 7, JSVM_REGEXP_UNICODE_SETS = 1 << 8<br/>} | 正则表达式标志位。它们可以用来启用一组标志。 | 102| [JSVM_InitializedFlag](#jsvm_initializedflag) { JSVM_ZERO_INITIALIZED, JSVM_UNINITIALIZED } | 初始化方式的标志位 | 103| [JSVM_WasmOptLevel](#jsvm_wasmoptlevel) { JSVM_WASM_OPT_BASELINE = 10, JSVM_WASM_OPT_HIGH = 20 } | WebAssembly 函数优化等级 | 104| [JSVM_CacheType](#jsvm_cachetype) { JSVM_CACHE_TYPE_JS, JSVM_CACHE_TYPE_WASM } | 缓存类型 | 105| [JSVM_MicrotaskPolicy](#jsvm_microtaskpolicy) { JSVM_MICROTASK_EXPLICIT, JSVM_MICROTASK_AUTO } | 微任务执行策略 | 106| [JSVM_TraceCategory](#jsvm_tracecategory) { JSVM_TRACE_VM, JSVM_TRACE_COMPILE, JSVM_TRACE_EXECUTE, JSVM_TRACE_RUNTIME, JSVM_TRACE_STACK_TRACE, JSVM_TRACE_WASM, JSVM_TRACE_WASM_DETAILED } | JSVM 内部 Trace 事件的类别 | 107| [JSVM_CBTriggerTimeForGC](#jsvm_cbtriggertimeforgc) { JSVM_CB_TRIGGER_BEFORE_GC, JSVM_CB_TRIGGER_AFTER_GC } | 触发回调函数的时机 | 108| [JSVM_GCType](#jsvm_gctype) { JSVM_GC_TYPE_SCAVENGE = 1 << 0, JSVM_GC_TYPE_MINOR_MARK_COMPACT = 1 << 1, JSVM_GC_TYPE_MARK_SWEEP_COMPACT 1 << 2, JSVM_GC_TYPE_INCREMENTAL_MARKING 1 << 3, JSVM_GC_TYPE_PROCESS_WEAK_CALLBACKS 1 << 4, JSVM_GC_TYPE_ALL = JSVM_GC_TYPE_SCAVENGE \| JSVM_GC_TYPE_MINOR_MARK_COMPACT \| JSVM_GC_TYPE_MARK_SWEEP_COMPACT \| JSVM_GC_TYPE_INCREMENTAL_MARKING \| JSVM_GC_TYPE_PROCESS_WEAK_CALLBACKS } | JSVM 内部 Trace 事件的类别 | 109| [JSVM_GCCallbackFlags](#jsvm_gccallbackflags) { JSVM_NO_GC_CALLBACK_FLAGS, JSVM_GC_CALLBACK_CONSTRUCT_RETAINED_OBJECT_INFOS, JSVM_GC_CALLBACK_FORCED, JSVM_GC_CALLBACK_SYNCHRONOUS_PHANTOM_CALLBACK_PROCESSING, JSVM_GC_CALLBACK_COLLECT_ALL_AVAILABLE_GARBAGE, JSVM_GC_CALLBACK_COLLECT_ALL_EXTERNAL_MEMORY, JSVM_GC_CALLBACK_SCHEDULE_IDLE_GARBAGE_COLLECTION } | GC回调函数标记 | 110| [JSVM_PromiseRejectEvent](#jsvm_promiserejectevent) { JSVM_PROMISE_REJECT_OTHER_REASONS, JSVM_PROMISE_REJECT_WITH_NO_HANDLER, JSVM_PROMISE_HANDLER_ADDED_AFTER_REJECT, JSVM_PROMISE_REJECT_AFTER_RESOLVED, JSVM_PROMISE_RESOLVE_AFTER_RESOLVED } | promise-reject事件 | 111| [JSVM_MessageErrorLevel](#jsvm_messageerrorlevel) { JSVM_MESSAGE_LOG = 1 << 0, JSVM_MESSAGE_DEBUG = 1 << 1, JSVM_MESSAGE_INFO 1 << 2, JSVM_MESSAGE_ERROR 1 << 3, JSVM_MESSAGE_WARNING 1 << 4, JSVM_MESSAGE_ALL = JSVM_MESSAGE_LOG \| JSVM_MESSAGE_DEBUG \| JSVM_MESSAGE_INFO \| JSVM_MESSAGE_ERROR \| JSVM_MESSAGE_WARNING } | message的报错级别 | 112| [JSVM_DefineClassOptionsId](#jsvm_defineclassoptionsid) { JSVM_DEFINE_CLASS_NORMAL, JSVM_DEFINE_CLASS_WITH_COUNT, JSVM_DEFINE_CLASS_WITH_PROPERTY_HANDLER } | 定义Class的选项ID | 113 114 115### 函数 116 117| 名称 | 描述 | 118| -------- | -------- | 119| EXTERN_C_START JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Init](#oh_jsvm_init) ([JSVM_InitOptions](_j_s_v_m___init_options.md) \*options) | 初始化一个JavaScript虚拟机。 | 120| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateVM](#oh_jsvm_createvm) (const [JSVM_CreateVMOptions](_j_s_v_m___create_v_m_options.md) \*options, [JSVM_VM](#jsvm_vm) \*result) | 创建一个虚拟机实例。 | 121| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetMicrotaskPolicy](#oh_jsvm_setmicrotaskpolicy) ( [JSVM_VM ](#jsvm_vm) vm, [JSVM_MicrotaskPolicy ](#jsvm_microtaskpolicy) policy) | 用于设置虚拟机实例的微任务执行策略。<br/>如果该方法未被调用,虚拟机实例的默认策略为 JSVM_MicrotaskPolicy::JSVM_MICROTASK_AUTO。 | 122| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DestroyVM](#oh_jsvm_destroyvm) ([JSVM_VM](#jsvm_vm) vm) | 销毁一个虚拟机实例。 | 123| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateProxy](#oh_jsvm_createproxy) (const [JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) target, [JSVM_Value](#jsvm_value) handler, [JSVM_Value](#jsvm_value) \*result) | 创建 JavaScript Proxy。<br/>该接口等价于在 JavaScript 中执行 new Proxy(target, handler)。 | 124| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_IsProxy](#oh_jsvm_isproxy) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isProxy) | 判断传入的值是否为 JavaScript Proxy。 | 125| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_ProxyGetTarget](#oh_jsvm_proxygettarget) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_Value](#jsvm_value) \*result) | 获取 JavaScript Proxy 中的目标对象。 | 126| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_OpenVMScope](#oh_jsvm_openvmscope) ([JSVM_VM](#jsvm_vm) vm, [JSVM_VMScope](#jsvm_vmscope) \*result) | 为虚拟机实例打开一个新的虚拟机作用域。 | 127| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CloseVMScope](#oh_jsvm_closevmscope) ([JSVM_VM](#jsvm_vm) vm, [JSVM_VMScope](#jsvm_vmscope) scope) | 关闭虚拟机实例的虚拟机作用域。 | 128| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateEnv](#oh_jsvm_createenv) ([JSVM_VM](#jsvm_vm) vm, size_t propertyCount, const [JSVM_PropertyDescriptor](_j_s_v_m___property_descriptor.md) \*properties, [JSVM_Env](#jsvm_env) \*result) | 基于新环境上下文的可选属性,创建一个新环境。 | 129| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateEnvFromSnapshot](#oh_jsvm_createenvfromsnapshot) ([JSVM_VM](#jsvm_vm) vm, size_t index, [JSVM_Env](#jsvm_env) \*result) | 基于虚拟机的起始快照,创建一个新的环境。 | 130| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DestroyEnv](#oh_jsvm_destroyenv) ([JSVM_Env](#jsvm_env) env) | 销毁环境。 | 131| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_OpenEnvScope](#oh_jsvm_openenvscope) ([JSVM_Env](#jsvm_env) env, [JSVM_EnvScope](#jsvm_envscope) \*result) | 打开一个新的环境作用域。 | 132| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CloseEnvScope](#oh_jsvm_closeenvscope) ([JSVM_Env](#jsvm_env) env, [JSVM_EnvScope](#jsvm_envscope) scope) | 关闭环境作用域。 | 133| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetVM](#oh_jsvm_getvm) ([JSVM_Env](#jsvm_env) env, [JSVM_VM](#jsvm_vm) \*result) | 将检索给定环境的虚拟机实例。 | 134| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CompileScript](#oh_jsvm_compilescript) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) script, const uint8_t \*cachedData, size_t cacheDataLength, bool eagerCompile, bool \*cacheRejected, [JSVM_Script](#jsvm_script) \*result) | 编译一串JavaScript代码,并返回编译后的脚本。 | 135| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CompileScriptWithOrigin](#oh_jsvm_compilescriptwithorigin) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) script, const uint8_t \*cachedData, size_t cacheDataLength, bool eagerCompile, bool \*cacheRejected, [JSVM_ScriptOrigin](_j_s_v_m___script_origin.md) \*origin, [JSVM_Script](#jsvm_script) \*result) | 编译一串包含 sourcemap 信息的 JavaScript 代码,并返回编译后的脚本。 | 136| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CompileScriptWithOptions](#oh_jsvm_compilescriptwithoptions) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) script, size_t optionCount, JSVM_CompileOptions options[], [JSVM_Value](#jsvm_value) \*result) | 编译一串JavaScript代码,并返回编译后的脚本。 | 137| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateCodeCache](#oh_jsvm_createcodecache) ([JSVM_Env](#jsvm_env) env, [JSVM_Script](#jsvm_script) script, const uint8_t \*\*data, size_t \*length) | 为编译后的脚本创建代码缓存。 | 138| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_RunScript](#oh_jsvm_runscript) ([JSVM_Env](#jsvm_env) env, [JSVM_Script](#jsvm_script) script, [JSVM_Value](#jsvm_value) \*result) | 执行一串JavaScript代码并返回其结果,其中包含以下注意事项: 与eval不同的是,该函数不允许脚本访问当前词法作用域,因此也不允许访问模块作用域, 这意味着require等伪全局变量将不可用。 脚本可以访问全局作用域。 脚本中的函数和var声明将被添加到全局对象。 使用let和const的变量声明将全局可见,但不会被添加到全局对象。 this的值在脚本内是global。 | 139| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetInstanceData](#oh_jsvm_setinstancedata) ([JSVM_Env](#jsvm_env) env, void \*data, [JSVM_Finalize](#jsvm_finalize) finalizeCb, void \*finalizeHint) | 将data与当前运行的JSVM环境相关联。后续可以使用OH_JSVM_GetInstanceData()检索data。 通过先前调用OH_JSVM_SetInstanceData()设置的任何与当前运行的JSVM环境相关联的现有数据都将 被覆盖。如果先前提供了finalizeCb,则不会调用它。 | 140| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetInstanceData](#oh_jsvm_getinstancedata) ([JSVM_Env](#jsvm_env) env, void \*\*data) | 检索通过OH_JSVM_SetInstanceData()与当前运行的JSVM环境相关联的数据。 如果未设置任何关联数据,该函数调用将成功,且data设置为NULL。 | 141| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetLastErrorInfo](#oh_jsvm_getlasterrorinfo) ([JSVM_Env](#jsvm_env) env, const [JSVM_ExtendedErrorInfo](_j_s_v_m___extended_error_info.md) \*\*result) | 检索JSVM_ExtendedErrorInfo结构,其中包含有关发生的最后一个错误的信息。 返回的JSVM_ExtendedErrorInfo的内容仅在对同一env调用JSVM-API函数之前有效。 这包括对OH_JSVM_IsExceptionPending的调用,因此可能经常需要复制信息以便以后使用。 error_message中返回的指针指向一个静态定义的字符串,因此如果你在调用另一个JSVM-API 函数之前将它从error_message字段(将被覆盖)中复制出来,则可以安全地使用该指针。 | 142| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Throw](#oh_jsvm_throw) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) error) | 抛出提供的JavaScript值。 | 143| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ThrowError](#oh_jsvm_throwerror) ([JSVM_Env](#jsvm_env) env, const char \*code, const char \*msg) | 会抛出带有所提供文本的JavaScript Error。 | 144| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ThrowTypeError](#oh_jsvm_throwtypeerror) ([JSVM_Env](#jsvm_env) env, const char \*code, const char \*msg) | 会抛出带有所提供文本的JavaScript TypeError。 | 145| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ThrowRangeError](#oh_jsvm_throwrangeerror) ([JSVM_Env](#jsvm_env) env, const char \*code, const char \*msg) | 会抛出带有所提供文本的JavaScript RangeError。 | 146| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ThrowSyntaxError](#oh_jsvm_throwsyntaxerror) ([JSVM_Env](#jsvm_env) env, const char \*code, const char \*msg) | 会抛出带有所提供文本的JavaScript SyntaxError。 | 147| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsError](#oh_jsvm_iserror) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 查询JSVM_Value以检查它是否表示错误对象。 | 148| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateError](#oh_jsvm_createerror) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) code, [JSVM_Value](#jsvm_value) msg, [JSVM_Value](#jsvm_value) \*result) | 返回带有所提供文本的JavaScript Error。 | 149| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateTypeError](#oh_jsvm_createtypeerror) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) code, [JSVM_Value](#jsvm_value) msg, [JSVM_Value](#jsvm_value) \*result) | 返回带有所提供文本的JavaScript TypeError。 | 150| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateRangeError](#oh_jsvm_createrangeerror) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) code, [JSVM_Value](#jsvm_value) msg, [JSVM_Value](#jsvm_value) \*result) | 返回带有所提供文本的JavaScript RangeError。 | 151| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateSyntaxError](#oh_jsvm_createsyntaxerror) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) code, [JSVM_Value](#jsvm_value) msg, [JSVM_Value](#jsvm_value) \*result) | 返回带有所提供文本的JavaScript SyntaxError。 | 152| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetAndClearLastException](#oh_jsvm_getandclearlastexception) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取并清除上一次异常。如果出现挂起,则返回JavaScript异常,否则返回NULL。 | 153| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsExceptionPending](#oh_jsvm_isexceptionpending) ([JSVM_Env](#jsvm_env) env, bool \*result) | 查询上一次异常是否由挂起导致的。如果由异常导致,则返回true,否则返回false。 | 154| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_OpenHandleScope](#oh_jsvm_openhandlescope) ([JSVM_Env](#jsvm_env) env, [JSVM_HandleScope](#jsvm_handlescope) \*result) | 开辟了一个新的作用域。 | 155| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CloseHandleScope](#oh_jsvm_closehandlescope) ([JSVM_Env](#jsvm_env) env, [JSVM_HandleScope](#jsvm_handlescope) scope) | 关闭传入的作用域。必须按照创建作用域的相反顺序关闭作用域。 | 156| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_OpenEscapableHandleScope](#oh_jsvm_openescapablehandlescope) ([JSVM_Env](#jsvm_env) env, [JSVM_EscapableHandleScope](#jsvm_escapablehandlescope) \*result) | 会打开一个新作用域,从中可以将一个对象提升到外部作用域。 | 157| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CloseEscapableHandleScope](#oh_jsvm_closeescapablehandlescope) ([JSVM_Env](#jsvm_env) env, [JSVM_EscapableHandleScope](#jsvm_escapablehandlescope) scope) | 关闭传入的作用域。必须按照创建作用域的相反顺序关闭作用域。 即使存在挂起的JavaScript异常,也可以调用此JSVM_API。 | 158| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_EscapeHandle](#oh_jsvm_escapehandle) ([JSVM_Env](#jsvm_env) env, [JSVM_EscapableHandleScope](#jsvm_escapablehandlescope) scope, [JSVM_Value](#jsvm_value) escapee, [JSVM_Value](#jsvm_value) \*result) | 提升JavaScript对象的句柄,使其在外部作用域的生命周期内有效。 每个作用域只能调用一次。如果多次调用,将返回错误。 | 159| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateReference](#oh_jsvm_createreference) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, uint32_t initialRefcount, [JSVM_Ref](#jsvm_ref) \*result) | 对传入的值创建一个具有指定引用计数的新引用。 | 160| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DeleteReference](#oh_jsvm_deletereference) ([JSVM_Env](#jsvm_env) env, [JSVM_Ref](#jsvm_ref) ref) | 删除传入的引用。 | 161| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ReferenceRef](#oh_jsvm_referenceref) ([JSVM_Env](#jsvm_env) env, [JSVM_Ref](#jsvm_ref) ref, uint32_t \*result) | 增加传入引用的引用计数并返回生成的引用计数。 | 162| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ReferenceUnref](#oh_jsvm_referenceunref) ([JSVM_Env](#jsvm_env) env, [JSVM_Ref](#jsvm_ref) ref, uint32_t \*result) | 递减传入引用的引用计数并返回生成的引用计数。 | 163| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetReferenceValue](#oh_jsvm_getreferencevalue) ([JSVM_Env](#jsvm_env) env, [JSVM_Ref](#jsvm_ref) ref, [JSVM_Value](#jsvm_value) \*result) | 如果仍然有效,此JSVM-API将返回JSVM_Value, 表示与JSVM_Ref关联的JavaScript值。否则,结果将为NULL。 | 164| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateArray](#oh_jsvm_createarray) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 返回对应于JavaScript Array类型的JSVM-API值。 | 165| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateArrayWithLength](#oh_jsvm_createarraywithlength) ([JSVM_Env](#jsvm_env) env, size_t length, [JSVM_Value](#jsvm_value) \*result) | 返回对应于JavaScript Array类型的JSVM-API值。Array 的长度属性设置为传入的长度参数。但是,不保证底层缓冲区在创建 数组时由VM预先分配。该行为留给底层VM实现。 | 166| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateArraybuffer](#oh_jsvm_createarraybuffer) ([JSVM_Env](#jsvm_env) env, size_t byteLength, void \*\*data, [JSVM_Value](#jsvm_value) \*result) | 返回JavaScript ArrayBuffer类型对应的JSVM-API值。ArrayBuffer用于 表示固定长度的二进制数据缓冲区。通常用作TypedArray对象的后备缓冲区。 分配的ArrayBuffer有一个底层字节缓冲区,其大小由传入的length参数决定。 底层缓冲区可选择返回给调用方,调用方可直接操作该缓冲区。 此缓冲区只能直接从native代码写入。如果想从JavaScript写入该缓冲区, 需创建TypedArray或DataView对象。 | 167| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_AllocateArrayBufferBackingStoreData](#oh_jsvm_allocatearraybufferbackingstoredata) (size_t byteLength, [JSVM_InitializedFlag](#jsvm_initializedflag) initialized, void \*\*data) | 申请一段给 array buffer 使用的 BackingStore 内存。 | 168| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_FreeArrayBufferBackingStoreData](#oh_jsvm_freearraybufferbackingstoredata) (void \*data) | 释放由 OH_JSVM_AllocateArrayBufferBackingStoreData 申请的 BackingStore 内存。 | 169| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_CreateArrayBufferFromBackingStoreData](#oh_jsvm_createarraybufferfrombackingstoredata) ([JSVM_Env](#jsvm_env) env, void \*data, size_t backingStoreSize, size_t offset, size_t arrayBufferSize, [JSVM_Value](#jsvm_value) \*result) | 在申请得到的 BackingStore 内存上创建 array buffer。 | 170| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateDate](#oh_jsvm_createdate) ([JSVM_Env](#jsvm_env) env, double time, [JSVM_Value](#jsvm_value) \*result) | 分配一个JavaScript Date对象。此API不处理闰秒。 这是因为ECMAScript遵循POSIX时间规范,对闰秒进行忽略。 | 171| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateExternal](#oh_jsvm_createexternal) ([JSVM_Env](#jsvm_env) env, void \*data, [JSVM_Finalize](#jsvm_finalize) finalizeCb, void \*finalizeHint, [JSVM_Value](#jsvm_value) \*result) | 分配一个带有外部数据的JavaScript值。这用于通过JavaScript代码传递外部数据。 后续可以使用OH_JSVM_GetValueExternal由native代码检索。 该API添加了一个JSVM_Finalize回调,当刚刚创建的JavaScript对象被垃圾回收时将调用该回调。 创建的值不是一个对象,因此不支持附加属性。它被认为是一个独特的值类型: 使用外部值调用OH_JSVM_Typeof()会生成JSVM_EXTERNAL。 | 172| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateObject](#oh_jsvm_createobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 分配一个默认的JavaScript对象。该函数功能等同于在JavaScript中执行new Object()。 | 173| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateSymbol](#oh_jsvm_createsymbol) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) description, [JSVM_Value](#jsvm_value) \*result) | 从UTF8 编码的C字符串创建JavaScript symbol值。 | 174| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SymbolFor](#oh_jsvm_symbolfor) ([JSVM_Env](#jsvm_env) env, const char \*utf8description, size_t length, [JSVM_Value](#jsvm_value) \*result) | 在全局注册表中搜索具有给定描述的现有符号。如果该 符号已经存在,它将被返回,否则将在注册表中创建一个新符号。 | 175| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateTypedarray](#oh_jsvm_createtypedarray) ([JSVM_Env](#jsvm_env) env, [JSVM_TypedarrayType](#jsvm_typedarraytype) type, size_t length, [JSVM_Value](#jsvm_value) arraybuffer, size_t byteOffset, [JSVM_Value](#jsvm_value) \*result) | 基于已有的ArrayBuffer对象,创建一个JavaScript TypedArray对象。TypedArray 对象在底层数据缓冲区上提供了一个类似数组的视图,其中每个元素都具有 相同的底层二进制标量数据类型。要求:(length\* 元素大小)+ byteOffset 小于等于传入的数组的大小(以字节为单位)。否则,将抛出范围错误(RangeError)。 | 176| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateDataview](#oh_jsvm_createdataview) ([JSVM_Env](#jsvm_env) env, size_t length, [JSVM_Value](#jsvm_value) arraybuffer, size_t byteOffset, [JSVM_Value](#jsvm_value) \*result) | 基于已有的ArrayBuffer对象,创建一个JavaScript DataView对象。DataView 对象在底层数据缓冲区上提供了一个类似数组的视图,其中的元素可以具有不同的大小和类型。 要求:二进制的length + byteOffset 小于或等于传入的数组的大小(以字节为单位)。否则,将抛出范围错误(RangeError)。 | 177| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateInt32](#oh_jsvm_createint32) ([JSVM_Env](#jsvm_env) env, int32_t value, [JSVM_Value](#jsvm_value) \*result) | 将C int32_t类型的值转换为JavaScript number类型。 | 178| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateUint32](#oh_jsvm_createuint32) ([JSVM_Env](#jsvm_env) env, uint32_t value, [JSVM_Value](#jsvm_value) \*result) | 将C uint32_t类型的值转换为JavaScript number类型。 | 179| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateInt64](#oh_jsvm_createint64) ([JSVM_Env](#jsvm_env) env, int64_t value, [JSVM_Value](#jsvm_value) \*result) | 将C int64_t类型的值转换为JavaScript number类型。 | 180| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateDouble](#oh_jsvm_createdouble) ([JSVM_Env](#jsvm_env) env, double value, [JSVM_Value](#jsvm_value) \*result) | 将C double类型的值转换为JavaScript number类型。 | 181| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateBigintInt64](#oh_jsvm_createbigintint64) ([JSVM_Env](#jsvm_env) env, int64_t value, [JSVM_Value](#jsvm_value) \*result) | 将C int64_t类型的值转换为JavaScript BigInt类型。 | 182| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateBigintUint64](#oh_jsvm_createbigintuint64) ([JSVM_Env](#jsvm_env) env, uint64_t value, [JSVM_Value](#jsvm_value) \*result) | 将C uint64_t类型的值转换为JavaScript BigInt类型。 | 183| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateBigintWords](#oh_jsvm_createbigintwords) ([JSVM_Env](#jsvm_env) env, int signBit, size_t wordCount, const uint64_t \*words, [JSVM_Value](#jsvm_value) \*result) | 将一组无符号64位字转换为单个BigInt值。 | 184| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateStringLatin1](#oh_jsvm_createstringlatin1) ([JSVM_Env](#jsvm_env) env, const char \*str, size_t length, [JSVM_Value](#jsvm_value) \*result) | 将采用ISO-8859-1编码的C字符串转换为JavaScript string值。 复制原生字符串。 | 185| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateStringUtf16](#oh_jsvm_createstringutf16) ([JSVM_Env](#jsvm_env) env, const char16_t \*str, size_t length, [JSVM_Value](#jsvm_value) \*result) | 将采用UTF16-LE编码的C字符串转换为JavaScript字符串值。 复制原生字符串。 | 186| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateStringUtf8](#oh_jsvm_createstringutf8) ([JSVM_Env](#jsvm_env) env, const char \*str, size_t length, [JSVM_Value](#jsvm_value) \*result) | 从UTF8编码的C字符串创建JavaScript string值。 复制原生字符串。 | 187| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetArrayLength](#oh_jsvm_getarraylength) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, uint32_t \*result) | 返回数组的长度。 | 188| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetArraybufferInfo](#oh_jsvm_getarraybufferinfo) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) arraybuffer, void \*\*data, size_t \*byteLength) | 用于检索ArrayBuffer的底层数据缓冲区及其长度。 | 189| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetPrototype](#oh_jsvm_getprototype) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) \*result) | 返回对象的原型。 | 190| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetTypedarrayInfo](#oh_jsvm_gettypedarrayinfo) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) typedarray, [JSVM_TypedarrayType](#jsvm_typedarraytype) \*type, size_t \*length, void \*\*data, [JSVM_Value](#jsvm_value) \*arraybuffer, size_t \*byteOffset) | 返回类型化数组的各种属性。如果不需要该属性,则任何输出参数都可以是 NULL。 | 191| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetDataviewInfo](#oh_jsvm_getdataviewinfo) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) dataview, size_t \*bytelength, void \*\*data, [JSVM_Value](#jsvm_value) \*arraybuffer, size_t \*byteOffset) | 返回DataView的各种属性。 如果不需要某一属性,则任何出参都可以设置为NULL。 | 192| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetDateValue](#oh_jsvm_getdatevalue) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, double \*result) | 返回给定JavaScript Date的时间值的C双精度基础类型。如果调用成功,返回JSVM_OK。 如果传入一个非JavaScript Date类型的JSVM_Value,返回JSVM_DATA_EXPECTED。 | 193| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueBool](#oh_jsvm_getvaluebool) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 返回给定JavaScript Boolean的C布尔基础类型等价值。 | 194| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueDouble](#oh_jsvm_getvaluedouble) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, double \*result) | 返回给定JavaScript number的C双精度基础类型等价值。 | 195| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueBigintInt64](#oh_jsvm_getvaluebigintint64) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, int64_t \*result, bool \*lossless) | 返回给定JavaScript BigInt的C int64_t基础类型等价值。 如果需要,它将截断该值,将lossless设置为false。 | 196| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueBigintUint64](#oh_jsvm_getvaluebigintuint64) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, uint64_t \*result, bool \*lossless) | 返回给定JavaScript BigInt的C uint64_t基础类型等价值。 如果需要,它将截断该值,将lossless设置为false。 | 197| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueBigintWords](#oh_jsvm_getvaluebigintwords) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, int \*signBit, size_t \*wordCount, uint64_t \*words) | 将单个BigInt值转换为符号位、64位小端数组和数组中的元素数。 signBit和words参数可以都设置为NULL。这种情况下,只获取wordCount。 | 198| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueExternal](#oh_jsvm_getvalueexternal) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, void \*\*result) | 检索之前传递给OH_JSVM_CreateExternal()的外部数据指针。 | 199| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueInt32](#oh_jsvm_getvalueint32) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, int32_t \*result) | 返回给定JavaScript number的C int32基础类型等价值。 | 200| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueInt64](#oh_jsvm_getvalueint64) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, int64_t \*result) | 返回给定JavaScript number的C int64基础类型等价值。 | 201| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueStringLatin1](#oh_jsvm_getvaluestringlatin1) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, char \*buf, size_t bufsize, size_t \*result) | 返回对应于传入值的ISO-8859-1编码字符串 | 202| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueStringUtf8](#oh_jsvm_getvaluestringutf8) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, char \*buf, size_t bufsize, size_t \*result) | 返回对应于传入值的UTF8编码字符串。 | 203| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueStringUtf16](#oh_jsvm_getvaluestringutf16) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, char16_t \*buf, size_t bufsize, size_t \*result) | 基于传入的值,查询对应的采用UTF16编码的字符串。 | 204| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetValueUint32](#oh_jsvm_getvalueuint32) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, uint32_t \*result) | 返回给定JavaScript number的C uint_32基础类型等价值。 | 205| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetBoolean](#oh_jsvm_getboolean) ([JSVM_Env](#jsvm_env) env, bool value, [JSVM_Value](#jsvm_value) \*result) | 返回用于表示给定布尔值的JavaScript单例对象。 | 206| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetGlobal](#oh_jsvm_getglobal) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 返回global对象。 | 207| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetNull](#oh_jsvm_getnull) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 返回null对象。 | 208| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetUndefined](#oh_jsvm_getundefined) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 返回Undefined对象。 | 209| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CoerceToBool](#oh_jsvm_coercetobool) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_Value](#jsvm_value) \*result) | 实现抽象操作ToBoolean()。 | 210| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CoerceToNumber](#oh_jsvm_coercetonumber) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_Value](#jsvm_value) \*result) | 实现抽象操作ToNumber()。 如果传入的值是对象,则函数可能会运行JavaScript代码。 | 211| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CoerceToObject](#oh_jsvm_coercetoobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_Value](#jsvm_value) \*result) | 实现抽象操作ToObject()。 | 212| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CoerceToString](#oh_jsvm_coercetostring) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_Value](#jsvm_value) \*result) | 实现抽象操作ToString()。 如果传入的值是对象,则函数可能会运行JavaScript代码。 | 213| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Typeof](#oh_jsvm_typeof) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_ValueType](#jsvm_valuetype) \*result) | 提供类似于在定义的对象上调用typeof运算符的行为。 不同点在于,该函数支持检测外部值;它将null检测为单独的类型, 而ECMAScript typeof将用于检测object。如果value的类型无效,则返回错误。 | 214| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Instanceof](#oh_jsvm_instanceof) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) constructor, bool \*result) | 提供类似于在对象上调用instanceof运算符的行为。 | 215| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsArray](#oh_jsvm_isarray) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 提供类似于在对象上调用IsArray的行为。 | 216| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsArraybuffer](#oh_jsvm_isarraybuffer) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 检查传入的对象是否为ArrayBuffer。 | 217| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsDate](#oh_jsvm_isdate) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isDate) | 检查传入的Object是否为日期。 | 218| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsTypedarray](#oh_jsvm_istypedarray) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 检查传入的Object是否为类型化数组。 | 219| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsDataview](#oh_jsvm_isdataview) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 检查传入的对象是否是DataView。 | 220| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_StrictEquals](#oh_jsvm_strictequals) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) lhs, [JSVM_Value](#jsvm_value) rhs, bool \*result) | 提供类似调用严格相等算法的行为。 | 221| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Equals](#oh_jsvm_equals) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) lhs, [JSVM_Value](#jsvm_value) rhs, bool \*result) | 提供类似调用宽松相等算法的行为。 无论JavaScript值类型如何,只要值相等,就返回true。 | 222| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DetachArraybuffer](#oh_jsvm_detacharraybuffer) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) arraybuffer) | 提供类似于调用ArrayBuffer detach操作的行为。 | 223| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsDetachedArraybuffer](#oh_jsvm_isdetachedarraybuffer) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 提供类似调用ArrayBuffer IsDetachedBuffer操作的行为。 | 224| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetPropertyNames](#oh_jsvm_getpropertynames) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) \*result) | 以字符数数组的形式返回object的可枚举属性的名称。 key为符号的object的属性将不会被包含在内。 | 225| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetAllPropertyNames](#oh_jsvm_getallpropertynames) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_KeyCollectionMode](#jsvm_keycollectionmode) keyMode, [JSVM_KeyFilter](#jsvm_keyfilter) keyFilter, [JSVM_KeyConversion](#jsvm_keyconversion) keyConversion, [JSVM_Value](#jsvm_value) \*result) | 返回一个数组,其中包含此对象的可用属性的名称。 | 226| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetProperty](#oh_jsvm_setproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) key, [JSVM_Value](#jsvm_value) value) | 为传入的object设置一个属性。 | 227| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetProperty](#oh_jsvm_getproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) key, [JSVM_Value](#jsvm_value) \*result) | 从传入的object中获取请求的属性。 | 228| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_HasProperty](#oh_jsvm_hasproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) key, bool \*result) | 检查传入的Object是否具有指定命名的属性。 | 229| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DeleteProperty](#oh_jsvm_deleteproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) key, bool \*result) | 尝试从object中删除key自己的属性。 | 230| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_HasOwnProperty](#oh_jsvm_hasownproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) key, bool \*result) | 检查传入的Object是否具有命名的自己的属性。key必须是string或symbol, 否则将抛出错误。JSVM-API不会执行任何数据类型之间的转换。 | 231| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetNamedProperty](#oh_jsvm_setnamedproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, const char \*utf8name, [JSVM_Value](#jsvm_value) value) | 此方法等效于调用OH_JSVM_SetProperty, 其中,通过utf8Name传入的字符串用于创建JSVM_Value。 | 232| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetNamedProperty](#oh_jsvm_getnamedproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, const char \*utf8name, [JSVM_Value](#jsvm_value) \*result) | 此方法等效于调用OH_JSVM_GetProperty, 其中,通过utf8Name传入的字符串用于创建JSVM_Value。 | 233| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_HasNamedProperty](#oh_jsvm_hasnamedproperty) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, const char \*utf8name, bool \*result) | 此方法等效于使用从作为utf8Name传入的字符串创建的JSVM_Value 调用OH_JSVM_HasProperty。 | 234| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetElement](#oh_jsvm_setelement) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, uint32_t index, [JSVM_Value](#jsvm_value) value) | 在传入的Object上设置一个元素。 | 235| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetElement](#oh_jsvm_getelement) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, uint32_t index, [JSVM_Value](#jsvm_value) \*result) | 获取请求索引处的元素。 | 236| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_HasElement](#oh_jsvm_haselement) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, uint32_t index, bool \*result) | 如果传入的Object在指定的索引处有一个元素,则此JSVM-API返回true。 | 237| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DeleteElement](#oh_jsvm_deleteelement) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, uint32_t index, bool \*result) | 尝试从object中删除指定index处的元素。 | 238| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DefineProperties](#oh_jsvm_defineproperties) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, size_t propertyCount, const [JSVM_PropertyDescriptor](_j_s_v_m___property_descriptor.md) \*properties) | 通过此方法可以在给定对象上高效定义多个属性, 这些属性使用属性描述符进行定义。通过一个属性描述符的数组, 此API将为对象依次设置数组中的属性。 | 239| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ObjectFreeze](#oh_jsvm_objectfreeze) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object) | 冻结指定的对象。这样可以防止为其添加新的属性、删除现有属性、更改现有属性的 可枚举性、可配置性或可写性、或者更改现有属性的值。它还可以防止改变对象的原型。 | 240| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ObjectSeal](#oh_jsvm_objectseal) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object) | 封装指定的对象。这样可以防止为其添加新的属性并且将所有现有属性标记为不可配置。 | 241| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CallFunction](#oh_jsvm_callfunction) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) recv, [JSVM_Value](#jsvm_value) func, size_t argc, const [JSVM_Value](#jsvm_value) \*argv, [JSVM_Value](#jsvm_value) \*result) | 支持从native代码调用JavaScript函数对象, 这是从native代码回调到JavaScript的主要机制。 | 242| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateFunction](#oh_jsvm_createfunction) ([JSVM_Env](#jsvm_env) env, const char \*utf8name, size_t length, [JSVM_Callback](#jsvm_callback) cb, [JSVM_Value](#jsvm_value) \*result) | 支持在native代码中创建函数对象,这是从JavaScript调用native代码的主要机制。 在此调用之后,新创建的函数在脚本中不再自动可见。相反,必须在JavaScript可见的任何对象上显示设置属性, 才能从脚本访问该函数。 | 243| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetCbInfo](#oh_jsvm_getcbinfo) ([JSVM_Env](#jsvm_env) env, [JSVM_CallbackInfo](#jsvm_callbackinfo) cbinfo, size_t \*argc, [JSVM_Value](#jsvm_value) \*argv, [JSVM_Value](#jsvm_value) \*thisArg, void \*\*data) | 此方法在回调函数中用于检索有关调用的详细信息, 例如来自给定回调信息的参数和this指针。 | 244| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetNewTarget](#oh_jsvm_getnewtarget) ([JSVM_Env](#jsvm_env) env, [JSVM_CallbackInfo](#jsvm_callbackinfo) cbinfo, [JSVM_Value](#jsvm_value) \*result) | 返回构造函数调用的new target。 如果当前回调不是构造函数调用,结果为NULL。 | 245| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_NewInstance](#oh_jsvm_newinstance) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) constructor, size_t argc, const [JSVM_Value](#jsvm_value) \*argv, [JSVM_Value](#jsvm_value) \*result) | 使用给定的JSVM_Value表示的构造函数来实例化新的JavaScript值。 | 246| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DefineClass](#oh_jsvm_defineclass) ([JSVM_Env](#jsvm_env) env, const char \*utf8name, size_t length, [JSVM_Callback](#jsvm_callback) constructor, size_t propertyCount, const [JSVM_PropertyDescriptor](_j_s_v_m___property_descriptor.md) \*properties, [JSVM_Value](#jsvm_value) \*result) | 定义一个JavaScript类。 | 247| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Wrap](#oh_jsvm_wrap) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) jsObject, void \*nativeObject, [JSVM_Finalize](#jsvm_finalize) finalizeCb, void \*finalizeHint, [JSVM_Ref](#jsvm_ref) \*result) | 在JavaScript对象中封装native实例。native实例 后续可以通过OH_JSVM_Unwrap()进行检索。 | 248| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_Unwrap](#oh_jsvm_unwrap) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) jsObject, void \*\*result) | 当JavaScript代码调用类的方法或属性访问器时,对应的JSVM_Callback将被调用。 如果回调是针对实例方法或访问器的,则回调的this参数是封装器对象;然后可以通过调用 封装器对象的OH_JSVM_Unwrap()获得作为调用目标的C++实例。 | 249| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_RemoveWrap](#oh_jsvm_removewrap) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) jsObject, void \*\*result) | 使用OH_JSVM_Wrap()检索先前封装在JavaScript对象js_object中的native实例并移除封装。 如果finalize回调与封装相关联,则当JavaScript对象被垃圾回收时将不再调用它。 | 250| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_TypeTagObject](#oh_jsvm_typetagobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, const [JSVM_TypeTag](_j_s_v_m___type_tag.md) \*typeTag) | 将typeTag指针的值与JavaScript对象或外部值相关联。可调用OH_JSVM_CheckObjectTypeTag() 判断附加在对象上的标记类型,以确保对象的类型正确。如果对象已经有关联的类型标记,则返回JSVM_INVALID_ARG。 | 251| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CheckObjectTypeTag](#oh_jsvm_checkobjecttypetag) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, const [JSVM_TypeTag](_j_s_v_m___type_tag.md) \*typeTag, bool \*result) | 将类型标签typeTag与JavaScript对象或外部值上的标签作对比。如果找到相同标签, 设置result为true,否则为false。 | 252| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_AddFinalizer](#oh_jsvm_addfinalizer) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) jsObject, void \*finalizeData, [JSVM_Finalize](#jsvm_finalize) finalizeCb, void \*finalizeHint, [JSVM_Ref](#jsvm_ref) \*result) | 为JavaScript对象添加JSVM_Finalize回调,当JavaScript对象被垃圾回收时调用该回调函数。 可以在单个JavaScript对象上多次调用OH_JSVM_AddFinalizer。 | 253| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetVersion](#oh_jsvm_getversion) ([JSVM_Env](#jsvm_env) env, uint32_t \*result) | 返回JSVM运行时支持的最高JSVM-API版本。 后续将新增JSVM-API,以便支持更多的功能。引入该API的目的:在支持某功能的JSVM版本, 可以使用新的功能;在不支持某功能的JSVM版本,可以提供回调行为。 | 254| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetVMInfo](#oh_jsvm_getvminfo) ([JSVM_VMInfo](_j_s_v_m___v_m_info.md) \*result) | 返回虚拟机的信息。 | 255| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_AdjustExternalMemory](#oh_jsvm_adjustexternalmemory) ([JSVM_Env](#jsvm_env) env, int64_t changeInBytes, int64_t \*result) | 此函数将因JavaScript对象而保持活跃的外部分配的内存大小通知给底层虚拟机。 注册外部分配的内存将比其他方式更频繁地触发全局垃圾回收。 | 256| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_MemoryPressureNotification](#oh_jsvm_memorypressurenotification) ([JSVM_Env](#jsvm_env) env, [JSVM_MemoryPressureLevel](#jsvm_memorypressurelevel) level) | 通知虚拟机系统内存不足并有选择地触发垃圾回收。 | 257| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreatePromise](#oh_jsvm_createpromise) ([JSVM_Env](#jsvm_env) env, [JSVM_Deferred](#jsvm_deferred) \*deferred, [JSVM_Value](#jsvm_value) \*promise) | 创建一个延迟对象和一个JavaScript promise。 | 258| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ResolveDeferred](#oh_jsvm_resolvedeferred) ([JSVM_Env](#jsvm_env) env, [JSVM_Deferred](#jsvm_deferred) deferred, [JSVM_Value](#jsvm_value) resolution) | 通过与之关联的延迟对象来解析JavaScript promise。 它只能用于解析对应的可用的延迟对象的JavaScript Promise。 这意味着Promise必须使用OH_JSVM_CreatePromise()创建,并且 从该调用返回的对象必须保留,才能将其传递给此API。 | 259| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_RejectDeferred](#oh_jsvm_rejectdeferred) ([JSVM_Env](#jsvm_env) env, [JSVM_Deferred](#jsvm_deferred) deferred, [JSVM_Value](#jsvm_value) rejection) | 通过与之关联的延迟对象来拒绝JavaScript Promise。 它只能用于拒绝对应的可用延迟对象的JavaScript Promise。 这意味着Promise必须使用OH_JSVM_CreatePromise()创建,并且 从该调用返回的对象必须保留,才能将其传递给此API。 | 260| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsPromise](#oh_jsvm_ispromise) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isPromise) | 查询Promise是否为原生Promise对象。 | 261| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_PromiseRegisterHandler](#oh_jsvm_promiseregisterhandler) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) promise, [JSVM_Value](#jsvm_value) onFulfilled, [JSVM_Value](#jsvm_value) onRejected, [JSVM_Value](#jsvm_value) \*result) | 注册处理 Promise 兑现/拒绝的回调函数。 | 262| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_JsonParse](#oh_jsvm_jsonparse) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) jsonString, [JSVM_Value](#jsvm_value) \*result) | 解析JSON字符串,并返回成功解析的值。 | 263| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_JsonStringify](#oh_jsvm_jsonstringify) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) jsonObject, [JSVM_Value](#jsvm_value) \*result) | 将对象字符串化,并返回成功转换后的字符串。 | 264| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateSnapshot](#oh_jsvm_createsnapshot) ([JSVM_VM](#jsvm_vm) vm, size_t contextCount, const [JSVM_Env](#jsvm_env) \*contexts, const char \*\*blobData, size_t \*blobSize) | 创建虚拟机的启动快照。 | 265| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetHeapStatistics](#oh_jsvm_getheapstatistics) ([JSVM_VM](#jsvm_vm) vm, [JSVM_HeapStatistics](_j_s_v_m___heap_statistics.md) \*result) | 返回一组虚拟机堆的统计数据。 | 266| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_StartCpuProfiler](#oh_jsvm_startcpuprofiler) ([JSVM_VM](#jsvm_vm) vm, [JSVM_CpuProfiler](#jsvm_cpuprofiler) \*result) | 创建并启动一个CPU profiler。 | 267| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_StopCpuProfiler](#oh_jsvm_stopcpuprofiler) ([JSVM_VM](#jsvm_vm) vm, [JSVM_CpuProfiler](#jsvm_cpuprofiler) profiler, [JSVM_OutputStream](#jsvm_outputstream) stream, void \*streamData) | 停止CPU profiler并将结果输出到流。 | 268| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_TakeHeapSnapshot](#oh_jsvm_takeheapsnapshot) ([JSVM_VM](#jsvm_vm) vm, [JSVM_OutputStream](#jsvm_outputstream) stream, void \*streamData) | 获取当前堆快照并将其输出到流。 | 269| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_OpenInspector](#oh_jsvm_openinspector) ([JSVM_Env](#jsvm_env) env, const char \*host, uint16_t port) | 在指定的主机和端口上激活inspector,将用来调试JS代码。 | 270| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CloseInspector](#oh_jsvm_closeinspector) ([JSVM_Env](#jsvm_env) env) | 尝试关闭剩余的所有inspector连接。 | 271| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_WaitForDebugger](#oh_jsvm_waitfordebugger) ([JSVM_Env](#jsvm_env) env, bool breakNextLine) | 等待主机与inspector建立socket连接,连接建立后程序将继续运行。 发送Runtime.runIfWaitingForDebugger命令。 | 272| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DefineClassWithPropertyHandler](#oh_jsvm_defineclasswithpropertyhandler) ([JSVM_Env](#jsvm_env) env, const char \*utf8name, size_t length, [JSVM_Callback](#jsvm_callback) constructor, size_t propertyCount, const [JSVM_PropertyDescriptor](_j_s_v_m___property_descriptor.md) \*properties, [JSVM_PropertyHandlerCfg](#jsvm_propertyhandlercfg) propertyHandlerCfg, [JSVM_Callback](#jsvm_callback) callAsFunctionCallback, [JSVM_Value](#jsvm_value) \*result) | 定义一个具有给定类名、构造函数、属性和回调处理程序的JavaScript类属性操作包括getter、setter、deleter、enumerator等,并作为函数回调进行调用。 | 273| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsUndefined](#oh_jsvm_isundefined) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isUndefined) | 此API检查传入的值是否为Undefined。 这相当于JS中的value === undefined。 | 274| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsNull](#oh_jsvm_isnull) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isNull) | 此API检查传入的值是否为Null对象。 这相当于JS中的value === null。 | 275| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsNullOrUndefined](#oh_jsvm_isnullorundefined) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isNullOrUndefined) | 此API检查传入的值是否为Null或Undefined。 这相当于JS中的value == null。 | 276| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsBoolean](#oh_jsvm_isboolean) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isBoolean) | 此API检查传入的值是否为Boolean。 这相当于JS中的‘typeof value === 'boolean’`。 | 277| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsNumber](#oh_jsvm_isnumber) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isNumber) | 此API检查传入的值是否为Number。 这相当于JS中的‘typeof value === 'number’`。 | 278| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsString](#oh_jsvm_isstring) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isString) | 此API检查传入的值是否为String。 这相当于JS中的‘typeof value === 'string’`。 | 279| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsSymbol](#oh_jsvm_issymbol) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isSymbol) | 此API检查传入的值是否为Symbol。 这相当于JS中的‘typeof value === 'symbol’`。 | 280| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsFunction](#oh_jsvm_isfunction) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isFunction) | 此API检查传入的值是否为Function。 这相当于JS中的‘typeof value === 'function’`。 | 281| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsObject](#oh_jsvm_isobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isObject) | 此API检查传入的值是否为Object。 | 282| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsBigInt](#oh_jsvm_isbigint) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isBigInt) | 此API检查传入的值是否为BigInt。 这相当于JS中的‘typeof value === 'bigint’`。 | 283| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_CreateMap](#oh_jsvm_createmap) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 此API返回与JavaScript Map类型对应的JavaScript值。 | 284| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_IsMap](#oh_jsvm_ismap) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isMap) | 此API检查传入的值是否为Map。 | 285| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_IsConstructor](#oh_jsvm_isconstructor) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isConstructor) | 此API检查传入的值是否为构造函数。 | 286| [JSVM_Status](#jsvm_status) JSVM_CDECL [OH_JSVM_CreateRegExp](#oh_jsvm_createregexp) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_RegExpFlags](#jsvm_regexpflags) flags, [JSVM_Value](#jsvm_value) \*result) | 此API返回与输入对应的正则表达式的JavaScript值。 接口可能会抛出异常。 | 287| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ObjectGetPrototypeOf](#oh_jsvm_objectgetprototypeof) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) \*result) | 获取JavaScript object的原型。 | 288| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ObjectSetPrototypeOf](#oh_jsvm_objectsetprototypeof) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) object, [JSVM_Value](#jsvm_value) prototype) | 设置给定的JavaScript object的原型。 | 289| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateSet](#oh_jsvm_createset) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 创建JavaScript Set对象。 | 290| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsSet](#oh_jsvm_isset) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*isSet) | 判断给定的对象是否是Set类型。 | 291| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CoerceToBigInt](#oh_jsvm_coercetobigint) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, [JSVM_Value](#jsvm_value) \*result) | 实现抽象操作ToBigInt()。 | 292| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsRegExp](#oh_jsvm_isregexp) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 此API检查传入的值是否为JavaScript RegExp对象。 | 293| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateFunctionWithScript](#oh_jsvm_createfunctionwithscript) ([JSVM_Env](#jsvm_env) env, const char \*funcName, size_t length, size_t argc, const [JSVM_Value](#jsvm_value) \*argv, [JSVM_Value](#jsvm_value) script, [JSVM_Value](#jsvm_value) \*result) | 创建一个以给定JavaScript为函数体的函数。 | 294| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_PumpMessageLoop](#oh_jsvm_pumpmessageloop) ([JSVM_VM](#jsvm_vm) vm, bool \*result) | 启动虚拟机内任务队列的运行。这个任务队列可以通过外部事件循环来执行。 | 295| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_PerformMicrotaskCheckpoint](#oh_jsvm_performmicrotaskcheckpoint) ([JSVM_VM](#jsvm_vm) vm) | 检查队列中是否有微任务等待,如果存在则执行它们。 | 296| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_RetainScript](#oh_jsvm_retainscript) ([JSVM_Env](#jsvm_env) env, [JSVM_Script](#jsvm_script) script) | 持久保存一个JSVM_Script并将其生命周期延长到当前作用域之外. | 297| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ReleaseScript](#oh_jsvm_releasescript) ([JSVM_Env](#jsvm_env) env, [JSVM_Script](#jsvm_script) script) | 此函数释放由OH_JSVM_RetainScript保留的脚本,释放后应避免对传入 script 的再次使用. | 298| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_OpenInspectorWithName](#oh_jsvm_openinspectorwithname) ([JSVM_Env](#jsvm_env) env, int pid, const char \*name) | 此函数打开一个命名为传入 name 的 inspector,为其打开对应 pid 的 unix domain 端口. | 299| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CompileWasmModule](#oh_jsvm_compilewasmmodule) ([JSVM_Env](#jsvm_env) env, const uint8_t \*wasmBytecode, size_t wasmBytecodeLength, const uint8_t \*cacheData, size_t cacheDataLength, bool \*cacheRejected, [JSVM_Value](#jsvm_value) \*wasmModule) | 将 WebAssembly 字节码编译得到一个 WebAssembly 模块。 如果提供了 WebAssembly 缓存,则会先尝试对缓存进行反序列化。 | 300| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CompileWasmFunction](#oh_jsvm_compilewasmfunction) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) wasmModule, uint32_t functionIndex, [JSVM_WasmOptLevel](#jsvm_wasmoptlevel) optLevel) | 对当前 WebAssembly 模块中指定索引的函数进行指定优化等级的编译优化。 | 301| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsWasmModuleObject](#oh_jsvm_iswasmmoduleobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 判断给定的 JSVM_Value 是否是一个 WebAssembly 模块。 | 302| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_CreateWasmCache](#oh_jsvm_createwasmcache) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) wasmModule, const uint8_t \*\*data, size_t \*length) | 为给定的 WebAssembly 模块生成缓存。 | 303| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_ReleaseCache](#oh_jsvm_releasecache) ([JSVM_Env](#jsvm_env) env, const uint8_t \*cacheData, [JSVM_CacheType](#jsvm_cachetype) cacheType) | 释放给定类型的缓存数据。 | 304| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsBigIntObject](#oh_jsvm_isbigintobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 判断给定的 JSVM_Value 是否是一个 BigInt对象。 | 305| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsBooleanObject](#oh_jsvm_isbooleanobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 判断给定的 JSVM_Value 是否是一个 Boolean对象。 | 306| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsStringObject](#oh_jsvm_isstringobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 判断给定的 JSVM_Value 是否是一个 String对象。 | 307| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsNumberObject](#oh_jsvm_isnumberobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 判断给定的 JSVM_Value 是否是一个 Number对象。 | 308| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_IsSymbolObject](#oh_jsvm_issymbolobject) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) value, bool \*result) | 判断给定的 JSVM_Value 是否是一个Symbol对象。 | 309| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolAsyncIterator](#oh_jsvm_getsymbolasynciterator) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.AsyncIterator能力。 | 310| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolHasInstance](#oh_jsvm_getsymbolhasinstance) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.HasInstance能力。 | 311| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolIsConcatSpreadable](#oh_jsvm_getsymbolisconcatspreadable) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.IsConcatSpreadable能力。 | 312| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolMatch](#oh_jsvm_getsymbolmatch) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.Match能力。 | 313| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolReplace](#oh_jsvm_getsymbolreplace) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.Replace能力。 | 314| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolSearch](#oh_jsvm_getsymbolsearch) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.Search能力。 | 315| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolSplit](#oh_jsvm_getsymbolsplit) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.Split能力。 | 316| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolToPrimitive](#oh_jsvm_getsymboltoprimitive) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.ToPrimitive能力。 | 317| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolUnscopables](#oh_jsvm_getsymbolunscopables) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.Unscopables。 | 318| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolToStringTag](#oh_jsvm_getsymboltostringtag) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.ToStringTag。 | 319| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_GetSymbolIterator](#oh_jsvm_getsymboliterator) ([JSVM_Env](#jsvm_env) env, [JSVM_Value](#jsvm_value) \*result) | 获取Well-Known symbol里的Symbol.Iterator。 | 320| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_TraceStart](#oh_jsvm_tracestart) (size_t count, [JSVM_TraceCategory](#jsvm_tracecategory) \*categories, const char \*tag, size_t eventsCount) | 对所有 JSVM 运行时实例,开始采集指定 Trace 类别的信息。(线程不安全) | 321| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_TraceStop](#oh_jsvm_tracestop) ([JSVM_OutputStream](#jsvm_outputstream) stream, void \*streamData) | 所有 JSVM 运行时,结束采集指定 Trace 类别的信息。(线程不安全) | 322| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_AddHandlerForGC](#oh_jsvm_addhandlerforgc) ([JSVM_VM](#jsvm_vm) vm, [JSVM_CBTriggerTimeForGC](#jsvm_cbtriggertimeforgc) triggerTime, [JSVM_HandlerForGC](#jsvm_handlerforgc) handler, [JSVM_GCType](#jsvm_gctype) gcType, void \*userData) | 在VM中添加GC的回调函数 | 323| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_RemoveHandlerForGC](#oh_jsvm_removehandlerforgc) ([JSVM_VM](#jsvm_vm) vm, [JSVM_CBTriggerTimeForGC](#jsvm_cbtriggertimeforgc) triggerTime, [JSVM_HandlerForGC](#jsvm_handlerforgc) handler, void \*userData) | 在VM中移除GC的回调函数 | 324| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetHandlerForOOMError](#oh_jsvm_sethandlerforoomerror) ([JSVM_VM](#jsvm_vm) vm, [JSVM_HandlerForOOMError](#jsvm_handlerforoomerror) handler) | 为OOM错误设置回调处理。当接口被重复调用时,仅最后一次生效。当传入的handler为null时,表示取消之前的设置 | 325| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetHandlerForFatalError](#oh_jsvm_sethandlerforfatalerror) ([JSVM_VM](#jsvm_vm) vm, [JSVM_HandlerForFatalError](#jsvm_handlerforfatalerror) handler) | 为Fatal错误设置回调处理。当接口被重复调用时,仅最后一次生效。当传入的handler为null时,表示取消之前的设置 | 326| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_SetHandlerForPromiseReject](#oh_jsvm_sethandlerforpromisereject) ([JSVM_VM](#jsvm_vm) vm, [JSVM_HandlerForPromiseReject](#jsvm_handlerforpromisereject) handler) | 为PromiseReject错误设置回调处理。当接口被重复调用时,仅最后一次生效。当传入的handler为null时,表示取消之前的设置 | 327| JSVM_EXTERN [JSVM_Status](#jsvm_status) [OH_JSVM_DefineClassWithOptions](#oh_jsvm_defineclasswithoptions) ([JSVM_Env ](#jsvm_env) env, const char \*utf8name, size_t length, [JSVM_Callback](#jsvm_callback) constructor, size_t propertyCount, const [JSVM_PropertyDescriptor](#_j_s_v_m___property_descriptor.md) \*properties, [JSVM_Value](#jsvm_value) parentClass, size_t optionCount, [JSVM_DefineClassOptions](#_j_s_v_m___define_class_options.md) options[], [JSVM_Value](#jsvm_value) \*result) | 在封装一个 C++ 类时,通过构造函数传递的 C++ 构造函数回调应该是类中的一个静态方法,该方法调用实际的类构造函数,然后根据传入的不同选项,将新的 C++ 实例封装在一个 JavaScript 对象中,并返回封装对象 | 328 329 330## 宏定义说明 331 332 333### JSVM_AUTO_LENGTH 334 335``` 336#define JSVM_AUTO_LENGTH SIZE_MAX 337``` 338 339**描述** 340 341自动长度。 342 343**起始版本:** 11 344 345 346## 类型定义说明 347 348 349### JSVM_Callback 350 351``` 352typedef JSVM_CallbackStruct* JSVM_Callback 353``` 354 355**描述** 356 357用户提供的native函数的函数指针类型,这些函数通过JSVM-API接口暴露给JavaScript。 358 359**起始版本:** 11 360 361 362### JSVM_CallbackInfo 363 364``` 365typedef struct JSVM_CallbackInfo__* JSVM_CallbackInfo 366``` 367 368**描述** 369 370表示传递给回调函数的不透明数据类型。可用于获取调用该函数的上下文的附加信息。 371 372**起始版本:** 11 373 374 375### JSVM_CpuProfiler 376 377``` 378typedef struct JSVM_CpuProfiler__* JSVM_CpuProfiler 379``` 380 381**描述** 382 383表示一个JavaScript CPU时间性能分析器。 384 385**起始版本:** 12 386 387 388### JSVM_Deferred 389 390``` 391typedef struct JSVM_Deferred__* JSVM_Deferred 392``` 393 394**描述** 395 396表示Promise延迟对象。 397 398**起始版本:** 11 399 400 401### JSVM_Env 402 403``` 404typedef struct JSVM_Env__* JSVM_Env 405``` 406 407**描述** 408 409表示虚拟机特定状态的上下文环境,需要在调用native函数时作为参数传递, 并且传递给后续任何的JSVM-API嵌套调用。 410 411**起始版本:** 11 412 413 414### JSVM_EnvScope 415 416``` 417typedef struct JSVM_EnvScope__* JSVM_EnvScope 418``` 419 420**描述** 421 422表示用于控制附加到当前虚拟机实例的环境。只有当线程通过 OH_JSVM_OpenEnvScope进入该环境的JSVM_EnvScope后,该环境才 对线程的虚拟机实例可用。 423 424**起始版本:** 11 425 426 427### JSVM_EscapableHandleScope 428 429``` 430typedef struct JSVM_EscapableHandleScope__* JSVM_EscapableHandleScope 431``` 432 433**描述** 434 435表示一种特殊类型的handle scope,用于将在特定handle scope内创建的值返回到父作用域。 436 437**起始版本:** 11 438 439 440### JSVM_Finalize 441 442``` 443typedef void(JSVM_CDECL* JSVM_Finalize) (JSVM_Env env, void *finalizeData, void *finalizeHint) 444``` 445 446**描述** 447 448函数指针类型,当native类型对象或数据与JS对象被关联时,传入该指针。该函数将会 在关联的JS对象被GC回收时被调用,用以执行native的清理动作。 449 450**起始版本:** 11 451 452 453### JSVM_HandlerForGC 454 455``` 456typedef void(JSVM_CDECL* JSVM_HandlerForGC)(JSVM_VM vm, JSVM_GCType gcType, JSVM_GCCallbackFlags flags, void* data) 457``` 458 459**描述** 460 461GC回调的函数指针类型。 462 463**起始版本:** 18 464 465 466### JSVM_HandlerForOOMError 467 468``` 469typedef void(JSVM_CDECL* JSVM_HandlerForOOMError)(const char* location, const char* detail, bool isHeapOOM); 470``` 471 472**描述** 473 474OOM-Error回调的函数指针类型。 475 476**起始版本:** 18 477 478 479### JSVM_HandlerForFatalError 480 481``` 482typedef void(JSVM_CDECL* JSVM_HandlerForFatalError)(const char* location, const char* message); 483``` 484 485**描述** 486 487Fatal-Error回调的函数指针类型。 488 489**起始版本:** 18 490 491 492### JSVM_HandlerForPromiseReject 493 494``` 495typedef void(JSVM_CDECL* JSVM_HandlerForPromiseReject)(JSVM_Env env, JSVM_PromiseRejectEvent rejectEvent, JSVM_Value rejectInfo); 496``` 497 498**描述** 499 500Promise-Reject回调的函数指针类型。 501 502**起始版本:** 18 503 504 505### JSVM_HandleScope 506 507``` 508typedef struct JSVM_HandleScope__* JSVM_HandleScope 509``` 510 511**描述** 512 513表示JavaScript值的作用域,用于控制和修改在特定范围内创建的对象的生命周期。 通常,JSVM-API值是在JSVM_HandleScope的上下文中创建的。当从JavaScript调用native方法时, 将存在默认JSVM_HandleScope。如果用户没有显式创建新的JSVM_HandleScope,将在默认 JSVM_HandleScope中创建JSVM-API值。对于native方法执行之外的任何代码调用(例如,在libuv回调调用期间), 模块需要在调用任何可能导致创建JavaScript值的函数之前创建一个作用域。JSVM_HandleScope是使用 OH_JSVM_OpenHandleScope创建的,并使用OH_JSVM_CloseHandleScope销毁的。 关闭作用域代表向GC指示在JSVM_HandleScope作用域的生命周期内创建的所有JSVM_Value将不再从当前堆的栈帧中引用。 514 515**起始版本:** 11 516 517 518### JSVM_OutputStream 519 520``` 521typedef bool(JSVM_CDECL* JSVM_OutputStream) (const char *data, int size, void *streamData) 522``` 523 524**描述** 525 526ASCII输出流回调的函数指针类型。参数data是指输出的数据指针。参数size是指输出的数据大小。 空数据指针指示流的结尾。参数streamData是指与回调一起传递给API函数的指针,该API函数向输出流生成数据。回 调返回true表示流可以继续接受数据。否则,它将中止流。 527 528**起始版本:** 12 529 530 531### JSVM_PropertyHandlerCfg 532 533``` 534typedef JSVM_PropertyHandlerConfigurationStruct* JSVM_PropertyHandlerCfg 535``` 536 537**描述** 538 539包含属性监听回调的结构的指针类型。 540 541**起始版本:** 12 542 543 544### JSVM_Ref 545 546``` 547typedef struct JSVM_Ref__* JSVM_Ref 548``` 549 550**描述** 551 552表示JavaScript值的引用。 553 554**起始版本:** 11 555 556 557### JSVM_Script 558 559``` 560typedef struct JSVM_Script__* JSVM_Script 561``` 562 563**描述** 564 565表示一段JavaScript代码。 566 567**起始版本:** 11 568 569 570### JSVM_Value 571 572``` 573typedef struct JSVM_Value__* JSVM_Value 574``` 575 576**描述** 577 578表示JavaScript值。 579 580**起始版本:** 11 581 582 583### JSVM_Data 584 585``` 586typedef struct JSVM_Data__* JSVM_Data 587``` 588 589**描述** 590 591表示一个 JavaScript Data。 592 593**起始版本:** 18 594 595 596### JSVM_VM 597 598``` 599typedef struct JSVM_VM__* JSVM_VM 600``` 601 602**描述** 603 604表示JavaScript虚拟机实例。 605 606**起始版本:** 11 607 608 609### JSVM_VMScope 610 611``` 612typedef struct JSVM_VMScope__* JSVM_VMScope 613``` 614 615**描述** 616 617表示JavaScript虚拟机作用域。 618 619**起始版本:** 11 620 621 622## 枚举类型说明 623 624 625### JSVM_CacheType 626 627``` 628enum JSVM_CacheType 629``` 630 631**描述** 632 633缓存类型。 634 635**起始版本:** 12 636 637| 枚举值 | 描述 | 638| -------- | -------- | 639| JSVM_CACHE_TYPE_JS | JS 缓存, 由接口 OH_JSVM_CreateCodeCache 生成 | 640| JSVM_CACHE_TYPE_WASM | WebAssembly 缓存, 由接口 OH_JSVM_CreateWasmCache 生成 | 641 642 643### JSVM_MicrotaskPolicy 644 645``` 646enum JSVM_MicrotaskPolicy 647``` 648 649**描述** 650 651JSVM 微任务执行策略。 652 653**起始版本:** 18 654 655| 枚举值 | 描述 | 656| -------- | -------- | 657| JSVM_MICROTASK_EXPLICIT | 调用 OH_JSVM_PerformMicrotaskCheckpoint 方法后微任务执行 | 658| JSVM_MICROTASK_AUTO | JS 调用栈为 0 时自动执行微任务<br/> 默认模式 | 659 660 661### JSVM_TraceCategory 662 663``` 664enum JSVM_TraceCategory 665``` 666 667**描述** 668 669JSVM 内部 Trace 事件的类别。 670 671**起始版本:** 18 672 673| 枚举值 | 描述 | 674| -------- | -------- | 675| JSVM_TRACE_VM | 采集 JSVM 主要接口调用, 例如执行 js 脚本 | 676| JSVM_TRACE_COMPILE | 采集编译相关的接口调用, 例如后台编译 | 677| JSVM_TRACE_EXECUTE | 采集与运行状态相关的接口调用, 例如中断与微任务 | 678| JSVM_TRACE_RUNTIME | 采集外部函数调用相关信息 | 679| JSVM_TRACE_STACK_TRACE | 采集 JSVM 中回栈相关信息 | 680| JSVM_TRACE_WASM | 采集主要的 WASM 相关接口调用, 例如编译与实例化 WASM 模块 | 681| JSVM_TRACE_WASM_DETAILED | 采集更多更细节的 WASM 相关接口调用,例如后台编译、跳板编译 | 682 683 684### JSVM_CBTriggerTimeForGC 685 686``` 687enum JSVM_CBTriggerTimeForGC 688``` 689 690**描述** 691 692触发回调函数的时机。 693 694**起始版本:** 18 695 696| 枚举值 | 描述 | 697| -------- | -------- | 698| JSVM_CB_TRIGGER_BEFORE_GC | 在GC之前触发回调函数 | 699| JSVM_CB_TRIGGER_AFTER_GC | 在GC之后触发回调函数 | 700 701 702### JSVM_GCType 703 704``` 705enum JSVM_GCType 706``` 707 708**描述** 709 710GC类型。 711 712**起始版本:** 18 713 714| 枚举值 | 描述 | 715| -------- | -------- | 716| JSVM_GC_TYPE_SCAVENGE = 1 << 0 | GC算法为Scavenge | 717| JSVM_GC_TYPE_MINOR_MARK_COMPACT = 1 << 1 | GC算法为Minor-Mark-Compact | 718| JSVM_GC_TYPE_MARK_SWEEP_COMPACT = 1 << 2 | GC算法为Mark-Sweep-Compact | 719| JSVM_GC_TYPE_INCREMENTAL_MARKING = 1 << 3 | GC算法为Incremental-Marking | 720| JSVM_GC_TYPE_PROCESS_WEAK_CALLBACKS = 1 << 4 | GC算法为Weak-Callbacks | 721| JSVM_GC_TYPE_ALL = JSVM_GC_TYPE_SCAVENGE \| JSVM_GC_TYPE_MINOR_MARK_COMPACT \| JSVM_GC_TYPE_MARK_SWEEP_COMPACT \| JSVM_GC_TYPE_INCREMENTAL_MARKING \| JSVM_GC_TYPE_PROCESS_WEAK_CALLBACKS | 包含所有类型的GC算法 | 722 723 724### JSVM_GCCallbackFlags 725 726``` 727enum JSVM_GCCallbackFlags 728``` 729 730**描述** 731 732GC回调函数标记。 733 734**起始版本:** 18 735 736| 枚举值 | 描述 | 737| -------- | -------- | 738| JSVM_NO_GC_CALLBACK_FLAGS | 无回调函数标记 | 739| JSVM_GC_CALLBACK_CONSTRUCT_RETAINED_OBJECT_INFOS | 垃圾回收回调中将构建保留对象信息 | 740| JSVM_GC_CALLBACK_FORCED | 强制执行垃圾回收回调 | 741| JSVM_GC_CALLBACK_SYNCHRONOUS_PHANTOM_CALLBACK_PROCESSING | 同步处理幽灵对象回调 | 742| JSVM_GC_CALLBACK_COLLECT_ALL_AVAILABLE_GARBAGE | 垃圾回收过程中会收集所有可用的垃圾对象 | 743| JSVM_GC_CALLBACK_COLLECT_ALL_EXTERNAL_MEMORY | 垃圾回收时会收集所有的外部内存 | 744| JSVM_GC_CALLBACK_SCHEDULE_IDLE_GARBAGE_COLLECTION | 在空闲时调度垃圾回收 | 745 746 747### JSVM_PromiseRejectEvent 748 749``` 750enum JSVM_PromiseRejectEvent 751``` 752 753**描述** 754 755promise-reject事件。 756 757**起始版本:** 18 758 759| 枚举值 | 描述 | 760| -------- | -------- | 761| JSVM_PROMISE_REJECT_OTHER_REASONS | Promise被拒绝,但拒绝的原因未知或不明确 | 762| JSVM_PROMISE_REJECT_WITH_NO_HANDLER | Promise被拒绝但没有处理程序 | 763| JSVM_PROMISE_HANDLER_ADDED_AFTER_REJECT | Promise已被拒绝后,再添加处理程序 | 764| JSVM_PROMISE_REJECT_AFTER_RESOLVED | Promise已被解决后,再尝试拒绝该Promise | 765| JSVM_PROMISE_RESOLVE_AFTER_RESOLVED | Promise已被解决后,再尝试解决该Promise | 766 767 768### JSVM_MessageErrorLevel 769 770``` 771enum JSVM_MessageErrorLevel 772``` 773 774**描述** 775 776GC类型。 777 778**起始版本:** 18 779 780| 枚举值 | 描述 | 781| -------- | -------- | 782| JSVM_MESSAGE_LOG = (1 << 0) | Log级别的信息 | 783| JSVM_MESSAGE_DEBUG = (1 << 1) | Debug级别的信息 | 784| JSVM_MESSAGE_INFO = (1 << 2) | Info级别的信息 | 785| JSVM_MESSAGE_ERROR = (1 << 3) | Error级别的信息 | 786| JSVM_MESSAGE_WARNING = (1 << 4) | Warning级别的信息 | 787| JSVM_MESSAGE_ALL = JSVM_MESSAGE_LOG \| JSVM_MESSAGE_DEBUG \| JSVM_MESSAGE_INFO \| JSVM_MESSAGE_ERROR \| JSVM_MESSAGE_WARNING | 所有级别的信息 | 788 789 790### JSVM_DefineClassOptionsId 791 792``` 793enum JSVM_DefineClassOptionsId 794``` 795 796**描述** 797 798定义Class的选项ID。 799 800**起始版本:** 18 801 802| 枚举值 | 描述 | 803| -------- | -------- | 804| JSVM_DEFINE_CLASS_NORMAL | 在常规模式下定义Class | 805| JSVM_DEFINE_CLASS_WITH_COUNT | 为所创建的Class预留指定数量的interfield槽位,在这些槽位中可以存放native-data | 806| JSVM_DEFINE_CLASS_WITH_PROPERTY_HANDLER | 为所创建的Class设置监听拦截属性以及设置作为函数调用时回调函数 | 807 808 809### JSVM_InitializedFlag 810 811``` 812enum JSVM_InitializedFlag 813``` 814 815**描述** 816 817初始化方式的标志位 818 819**起始版本:** 12 820 821| 枚举值 | 描述 | 822| -------- | -------- | 823| JSVM_ZERO_INITIALIZED | 初始化为 0 | 824| JSVM_UNINITIALIZED | 不做初始化 | 825 826 827### JSVM_KeyCollectionMode 828 829``` 830enum JSVM_KeyCollectionMode 831``` 832 833**描述** 834 835限制查找属性的范围。 836 837**起始版本:** 11 838 839| 枚举值 | 描述 | 840| -------- | -------- | 841| JSVM_KEY_INCLUDE_PROTOTYPES | 也包含对象原型链上的属性。 | 842| JSVM_KEY_OWN_ONLY | 仅包含对象自身属性。 | 843 844 845### JSVM_KeyConversion 846 847``` 848enum JSVM_KeyConversion 849``` 850 851**描述** 852 853键转换选项。 854 855**起始版本:** 11 856 857| 枚举值 | 描述 | 858| -------- | -------- | 859| JSVM_KEY_KEEP_NUMBERS | 将返回整数索引的数字。 | 860| JSVM_KEY_NUMBERS_TO_STRINGS | 将整数索引转换为字符串。 | 861 862 863### JSVM_KeyFilter 864 865``` 866enum JSVM_KeyFilter 867``` 868 869**描述** 870 871属性过滤器,可以通过使用or来构造一个复合过滤器。 872 873**起始版本:** 11 874 875| 枚举值 | 描述 | 876| -------- | -------- | 877| JSVM_KEY_ALL_PROPERTIES | 所有属性的键。 | 878| JSVM_KEY_WRITABLE | 可写的键。 | 879| JSVM_KEY_ENUMERABLE | 可枚举的键。 | 880| JSVM_KEY_CONFIGURABLE | 可配置的键。 | 881| JSVM_KEY_SKIP_STRINGS | 排除字符串类型的键。 | 882| JSVM_KEY_SKIP_SYMBOLS | 排除符号类型的键。 | 883 884 885### JSVM_MemoryPressureLevel 886 887``` 888enum JSVM_MemoryPressureLevel 889``` 890 891**描述** 892 893内存压力水平。 894 895**起始版本:** 11 896 897| 枚举值 | 描述 | 898| -------- | -------- | 899| JSVM_MEMORY_PRESSURE_LEVEL_NONE | 无压力。 | 900| JSVM_MEMORY_PRESSURE_LEVEL_MODERATE | 中等压力。 | 901| JSVM_MEMORY_PRESSURE_LEVEL_CRITICAL | 临界压力。 | 902 903 904### JSVM_PropertyAttributes 905 906``` 907enum JSVM_PropertyAttributes 908``` 909 910**描述** 911 912用于控制JavaScript对象属性的行为。 913 914**起始版本:** 11 915 916| 枚举值 | 描述 | 917| -------- | -------- | 918| JSVM_DEFAULT | 没有在属性上设置显式属性。 | 919| JSVM_WRITABLE | 该属性是可写的。 | 920| JSVM_ENUMERABLE | 该属性是可枚举的。 | 921| JSVM_CONFIGURABLE | 该属性是可配置的。 | 922| JSVM_STATIC | 该属性将被定义为类的静态属性,而不是默认的实例属性。这仅由OH_JSVM_DefineClass使用。 | 923| JSVM_DEFAULT_METHOD | 就像JS类中的方法一样,该属性是可配置和可写的,但不可枚举。 | 924| JSVM_DEFAULT_JSPROPERTY | 就像JavaScript中通过赋值设置的属性一样,属性是可写、可枚举和可配置的。 | 925| JSVM_NO_RECEIVER_CHECK | 设置该属性后会取消对方法接收者的校验。 | 926| JSVM_METHOD_NO_RECEIVER_CHECK | 同时设置 JSVM_NO_RECEIVER_CHECK 和 JSVM_DEFAULT_METHOD 属性。 | 927| JSVM_JSPROPERTY_NO_RECEIVER_CHECK | 同时设置 JSVM_NO_RECEIVER_CHECK 和 JSVM_DEFAULT_JSPROPERTY 属性。 | 928 929 930### JSVM_RegExpFlags 931 932``` 933enum JSVM_RegExpFlags 934``` 935 936**描述** 937 938正则表达式标志位。它们可以用来启用一组标志。 939 940**起始版本:** 12 941 942| 枚举值 | 描述 | 943| -------- | -------- | 944| JSVM_REGEXP_NONE | None模式。 | 945| JSVM_REGEXP_GLOBAL | Global模式。 | 946| JSVM_REGEXP_IGNORE_CASE | Ignore Case模式。 | 947| JSVM_REGEXP_MULTILINE | Multiline模式。 | 948| JSVM_REGEXP_STICKY | Sticky模式。 | 949| JSVM_REGEXP_UNICODE | Unicode模式。 | 950| JSVM_REGEXP_DOT_ALL | dotAll模式。 | 951| JSVM_REGEXP_LINEAR | Linear模式。 | 952| JSVM_REGEXP_HAS_INDICES | Has Indices模式。 | 953| JSVM_REGEXP_UNICODE_SETS | Unicode Sets模式。 | 954 955 956### JSVM_Status 957 958``` 959enum JSVM_Status 960``` 961 962**描述** 963 964表示JSVM-API调用成功或失败的完整状态码。 965 966**起始版本:** 11 967 968| 枚举值 | 描述 | 969| -------- | -------- | 970| JSVM_OK | 成功状态。 | 971| JSVM_INVALID_ARG | 无效的状态。 | 972| JSVM_OBJECT_EXPECTED | 期待传入对象类型。 | 973| JSVM_STRING_EXPECTED | 期望传入字符串类型。 | 974| JSVM_NAME_EXPECTED | 期望传入名字类型。 | 975| JSVM_FUNCTION_EXPECTED | 期待传入函数类型。 | 976| JSVM_NUMBER_EXPECTED | 期待传入数字类型。 | 977| JSVM_BOOLEAN_EXPECTED | 期待传入布尔类型。 | 978| JSVM_ARRAY_EXPECTED | 期待传入数组类型。 | 979| JSVM_GENERIC_FAILURE | 泛型失败状态。 | 980| JSVM_PENDING_EXCEPTION | 挂起异常状态。 | 981| JSVM_CANCELLED | 取消状态。 | 982| JSVM_ESCAPE_CALLED_TWICE | 转义调用了两次。 | 983| JSVM_HANDLE_SCOPE_MISMATCH | 句柄作用域不匹配。 | 984| JSVM_CALLBACK_SCOPE_MISMATCH | 回调作用域不匹配。 | 985| JSVM_QUEUE_FULL | 队列满。 | 986| JSVM_CLOSING | 关闭中。 | 987| JSVM_BIGINT_EXPECTED | 期望传入Bigint类型。 | 988| JSVM_DATE_EXPECTED | 期望传入日期类型。 | 989| JSVM_ARRAYBUFFER_EXPECTED | 期望传入ArrayBuffer类型。 | 990| JSVM_DETACHABLE_ARRAYBUFFER_EXPECTED | 可分离的数组缓冲区预期状态。 | 991| JSVM_WOULD_DEADLOCK | 将死锁状态。 | 992| JSVM_NO_EXTERNAL_BUFFERS_ALLOWED | 不允许外部缓冲区。 | 993| JSVM_CANNOT_RUN_JS | 不能执行JS。 | 994| JSVM_INVALID_TYPE | 传入的参数为非法类型。<br/>**起始版本:** 18 | 995 996 997### JSVM_TypedarrayType 998 999``` 1000enum JSVM_TypedarrayType 1001``` 1002 1003**描述** 1004 1005描述TypedArray的类型。 1006 1007**起始版本:** 11 1008 1009| 枚举值 | 描述 | 1010| -------- | -------- | 1011| JSVM_INT8_ARRAY | int8类型。 | 1012| JSVM_UINT8_ARRAY | uint8类型。 | 1013| JSVM_UINT8_CLAMPED_ARRAY | uint8固定类型。 | 1014| JSVM_INT16_ARRAY | int16类型。 | 1015| JSVM_UINT16_ARRAY | uint16类型。 | 1016| JSVM_INT32_ARRAY | int32类型。 | 1017| JSVM_UINT32_ARRAY | uint32类型。 | 1018| JSVM_FLOAT32_ARRAY | float32类型。 | 1019| JSVM_FLOAT64_ARRAY | float64类型。 | 1020| JSVM_BIGINT64_ARRAY | bigint64类型。 | 1021| JSVM_BIGUINT64_ARRAY | biguint64类型。 | 1022 1023 1024### JSVM_ValueType 1025 1026``` 1027enum JSVM_ValueType 1028``` 1029 1030**描述** 1031 1032描述JSVM_Value的类型。 1033 1034**起始版本:** 11 1035 1036| 枚举值 | 描述 | 1037| -------- | -------- | 1038| JSVM_UNDEFINED | 未定义类型。 | 1039| JSVM_NULL | Null类型。 | 1040| JSVM_BOOLEAN | 布尔类型。 | 1041| JSVM_NUMBER | 数字类型。 | 1042| JSVM_STRING | 字符串类型。 | 1043| JSVM_SYMBOL | 符号类型。 | 1044| JSVM_OBJECT | 对象类型。 | 1045| JSVM_FUNCTION | 函数类型。 | 1046| JSVM_EXTERNAL | 外部类型。 | 1047| JSVM_BIGINT | bigint类型。 | 1048 1049 1050### JSVM_WasmOptLevel 1051 1052``` 1053enum JSVM_WasmOptLevel 1054``` 1055 1056**描述** 1057 1058WebAssembly 函数优化等级 1059 1060**起始版本:** 12 1061 1062| 枚举值 | 描述 | 1063| -------- | -------- | 1064| JSVM_WASM_OPT_BASELINE | baseline 优化等级 | 1065| JSVM_WASM_OPT_HIGH | 高优化等级 | 1066 1067 1068## 函数说明 1069 1070 1071### OH_JSVM_AddFinalizer() 1072 1073``` 1074JSVM_EXTERN JSVM_Status OH_JSVM_AddFinalizer (JSVM_Env env, JSVM_Value jsObject, void * finalizeData, JSVM_Finalize finalizeCb, void * finalizeHint, JSVM_Ref * result ) 1075``` 1076 1077**描述** 1078 1079为JavaScript对象添加JSVM_Finalize回调,当JavaScript对象被垃圾回收时调用该回调函数。 可以在单个JavaScript对象上多次调用OH_JSVM_AddFinalizer。 1080 1081**起始版本:** 11 1082 1083**参数:** 1084 1085| 名称 | 描述 | 1086| -------- | -------- | 1087| env | 调用JSVM-API的环境。 | 1088| jsObject | 关联native数据的JavaScript对象。 | 1089| finalizeData | 要传递给finalizeCb的可选数据。 | 1090| finalizeCb | 当JavaScript对象被垃圾回收时,将用于释放native 数据的原生回调。JSVM_Finalize提供了更多详细信息。 | 1091| finalizeHint | 传递给finalize回调的可选上下文提示。 | 1092| result | 可选的对JavaScript对象的引用。 | 1093 1094**返回:** 1095 1096返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1097 1098JSVM_INVALID_ARG 表示传入的参数不合法。 1099 1100 1101### OH_JSVM_AdjustExternalMemory() 1102 1103``` 1104JSVM_EXTERN JSVM_Status OH_JSVM_AdjustExternalMemory (JSVM_Env env, int64_t changeInBytes, int64_t * result ) 1105``` 1106 1107**描述** 1108 1109此函数将因JavaScript对象而保持活跃的外部分配的内存大小通知给底层虚拟机。 注册外部分配的内存将比其他方式更频繁地触发全局垃圾回收。 1110 1111**起始版本:** 11 1112 1113**参数:** 1114 1115| 名称 | 描述 | 1116| -------- | -------- | 1117| env | 调用JSVM-API的环境。 | 1118| changeInBytes | 因JavaScript对象而保持活动状态的外部分配内存的变化。 | 1119| result | 调整值。 | 1120 1121**返回:** 1122 1123返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1124 1125 1126### OH_JSVM_AllocateArrayBufferBackingStoreData() 1127 1128``` 1129JSVM_Status JSVM_CDECL OH_JSVM_AllocateArrayBufferBackingStoreData (size_t byteLength, JSVM_InitializedFlag initialized, void ** data ) 1130``` 1131 1132**描述** 1133 1134申请一段给 array buffer 使用的 BackingStore 内存。 1135 1136**起始版本:** 12 1137 1138**参数:** 1139 1140| 名称 | 描述 | 1141| -------- | -------- | 1142| byteLength | BackingStore 内存的大小。 | 1143| initialized | BackingStore 内存初始化的方式。 | 1144| data | 用于接受申请 BackingStore 内存地址的指针。 | 1145 1146**返回:** 1147 1148返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1149 1150JSVM_INVALID_ARG 表示传入的 data 是空指针。 1151 1152JSVM_GENERIC_FAILURE 表示内存申请失败。 1153 1154 1155### OH_JSVM_CallFunction() 1156 1157``` 1158JSVM_EXTERN JSVM_Status OH_JSVM_CallFunction (JSVM_Env env, JSVM_Value recv, JSVM_Value func, size_t argc, const JSVM_Value * argv, JSVM_Value * result ) 1159``` 1160 1161**描述** 1162 1163支持从native代码调用JavaScript函数对象, 这是从native代码回调到JavaScript的主要机制。 1164 1165**起始版本:** 11 1166 1167**参数:** 1168 1169| 名称 | 描述 | 1170| -------- | -------- | 1171| env | 调用JSVM-API的环境。 | 1172| recv | 传递给被调用函数的this值。 | 1173| func | 表示将调用的JavaScript函数。 | 1174| argc | argv数组中的元素个数。 | 1175| argv | JSVM_values数组,表示将作为参数传递给函数的JavaScript值。 | 1176| result | 表示返回的JavaScript对象。 | 1177 1178**返回:** 1179 1180返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1181 1182JSVM_PENDING_EXCEPTION 表示执行的过程中产生了JS异常。 1183 1184JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 1185 1186 1187### OH_JSVM_CheckObjectTypeTag() 1188 1189``` 1190JSVM_EXTERN JSVM_Status OH_JSVM_CheckObjectTypeTag (JSVM_Env env, JSVM_Value value, const JSVM_TypeTag * typeTag, bool * result ) 1191``` 1192 1193**描述** 1194 1195将类型标签typeTag与JavaScript对象或外部值上的标签作对比。如果找到相同标签, 设置result为true,否则为false。 1196 1197**起始版本:** 11 1198 1199**参数:** 1200 1201| 名称 | 描述 | 1202| -------- | -------- | 1203| env | 调用JSVM-API的环境。 | 1204| value | 待检查类型标记的JavaScript对象或外部值。 | 1205| typeTag | 用于比较在对象上找到的任何标签的标签。 | 1206| result | 表示指定的类型标记是否与对象上的类型标记匹配。如果在对象上找不到该类型标记,也会返回false。 | 1207 1208**返回:** 1209 1210返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1211 1212JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 1213 1214 1215### OH_JSVM_CloseEnvScope() 1216 1217``` 1218JSVM_EXTERN JSVM_Status OH_JSVM_CloseEnvScope (JSVM_Env env, JSVM_EnvScope scope ) 1219``` 1220 1221**描述** 1222 1223关闭环境作用域。 1224 1225**起始版本:** 11 1226 1227**参数:** 1228 1229| 名称 | 描述 | 1230| -------- | -------- | 1231| env | 目标环境,JSVM-API接口将在该环境下调用。 | 1232| scope | 将要关闭的环境作用域。 | 1233 1234**返回:** 1235 1236返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1237 1238 1239### OH_JSVM_CloseEscapableHandleScope() 1240 1241``` 1242JSVM_EXTERN JSVM_Status OH_JSVM_CloseEscapableHandleScope (JSVM_Env env, JSVM_EscapableHandleScope scope ) 1243``` 1244 1245**描述** 1246 1247关闭传入的作用域。必须按照创建作用域的相反顺序关闭作用域。 即使存在挂起的JavaScript异常,也可以调用此JSVM_API。 1248 1249**起始版本:** 11 1250 1251**参数:** 1252 1253| 名称 | 描述 | 1254| -------- | -------- | 1255| env | 调用JSVM-API的环境。 | 1256| scope | 表示要关闭的作用域。 | 1257 1258**返回:** 1259 1260返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1261 1262JSVM_HANDLE_SCOPE_MISMATCH 表示执行失败。 1263 1264 1265### OH_JSVM_CloseHandleScope() 1266 1267``` 1268JSVM_EXTERN JSVM_Status OH_JSVM_CloseHandleScope (JSVM_Env env, JSVM_HandleScope scope ) 1269``` 1270 1271**描述** 1272 1273关闭传入的作用域。必须按照创建作用域的相反顺序关闭作用域。 1274 1275**起始版本:** 11 1276 1277**参数:** 1278 1279| 名称 | 描述 | 1280| -------- | -------- | 1281| env | 调用JSVM-API的环境。 | 1282| scope | 表示要关闭的作用域。 | 1283 1284**返回:** 1285 1286返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1287 1288 1289### OH_JSVM_CloseInspector() 1290 1291``` 1292JSVM_EXTERN JSVM_Status OH_JSVM_CloseInspector (JSVM_Env env) 1293``` 1294 1295**描述** 1296 1297尝试关闭剩余的所有inspector连接。 1298 1299**起始版本:** 12 1300 1301**参数:** 1302 1303| 名称 | 描述 | 1304| -------- | -------- | 1305| env | 调用JSVM-API的环境。 | 1306 1307**返回:** 1308 1309返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1310 1311 1312### OH_JSVM_CloseVMScope() 1313 1314``` 1315JSVM_EXTERN JSVM_Status OH_JSVM_CloseVMScope (JSVM_VM vm, JSVM_VMScope scope ) 1316``` 1317 1318**描述** 1319 1320关闭虚拟机实例的虚拟机作用域。 1321 1322**起始版本:** 11 1323 1324**参数:** 1325 1326| 名称 | 描述 | 1327| -------- | -------- | 1328| vm | 目标虚拟机实例。 | 1329| scope | 将要关闭的虚拟机作用域。 | 1330 1331**返回:** 1332 1333返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1334 1335 1336### OH_JSVM_CoerceToBigInt() 1337 1338``` 1339JSVM_EXTERN JSVM_Status OH_JSVM_CoerceToBigInt (JSVM_Env env, JSVM_Value value, JSVM_Value * result ) 1340``` 1341 1342**描述** 1343 1344实现抽象操作ToBigInt()。 1345 1346**起始版本:** 12 1347 1348**参数:** 1349 1350| 名称 | 描述 | 1351| -------- | -------- | 1352| env | 调用该JSVM-API的环境。 | 1353| value | 要进行强制转换的JavaScript值。 | 1354| result | 表示成功转换成BigInt后的JavaScript值。 | 1355 1356**返回:** 1357 1358返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1359 1360JSVM_BIGINT_EXPECTED 如果传入的JavaScript值无法转换成BitInt。 1361 1362 1363### OH_JSVM_CoerceToBool() 1364 1365``` 1366JSVM_EXTERN JSVM_Status OH_JSVM_CoerceToBool (JSVM_Env env, JSVM_Value value, JSVM_Value * result ) 1367``` 1368 1369**描述** 1370 1371实现抽象操作ToBoolean()。 1372 1373**起始版本:** 11 1374 1375**参数:** 1376 1377| 名称 | 描述 | 1378| -------- | -------- | 1379| env | 调用JSVM-API的环境。 | 1380| value | 要强制转换的JavaScript值。 | 1381| result | 代表强制的JavaScript Boolean。 | 1382 1383**返回:** 1384 1385返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1386 1387 1388### OH_JSVM_CoerceToNumber() 1389 1390``` 1391JSVM_EXTERN JSVM_Status OH_JSVM_CoerceToNumber (JSVM_Env env, JSVM_Value value, JSVM_Value * result ) 1392``` 1393 1394**描述** 1395 1396实现抽象操作ToNumber()。 如果传入的值是对象,则函数可能会运行JavaScript代码。 1397 1398**起始版本:** 11 1399 1400**参数:** 1401 1402| 名称 | 描述 | 1403| -------- | -------- | 1404| env | 调用JSVM-API的环境。 | 1405| value | 要强制转换的JavaScript值。 | 1406| result | 代表强制的JavaScript number。 | 1407 1408**返回:** 1409 1410返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1411 1412 1413### OH_JSVM_CoerceToObject() 1414 1415``` 1416JSVM_EXTERN JSVM_Status OH_JSVM_CoerceToObject (JSVM_Env env, JSVM_Value value, JSVM_Value * result ) 1417``` 1418 1419**描述** 1420 1421实现抽象操作ToObject()。 1422 1423**起始版本:** 11 1424 1425**参数:** 1426 1427| 名称 | 描述 | 1428| -------- | -------- | 1429| env | 调用JSVM-API的环境。 | 1430| value | 要强制转换的JavaScript值。 | 1431| result | 代表强制的JavaScript object。 | 1432 1433**返回:** 1434 1435返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1436 1437 1438### OH_JSVM_CoerceToString() 1439 1440``` 1441JSVM_EXTERN JSVM_Status OH_JSVM_CoerceToString (JSVM_Env env, JSVM_Value value, JSVM_Value * result ) 1442``` 1443 1444**描述** 1445 1446实现抽象操作ToString()。 如果传入的值是对象,则函数可能会运行JavaScript代码。 1447 1448**起始版本:** 11 1449 1450**参数:** 1451 1452| 名称 | 描述 | 1453| -------- | -------- | 1454| env | 调用JSVM-API的环境。 | 1455| value | 要强制转换的JavaScript值。 | 1456| result | 代表强制的JavaScript string。 | 1457 1458**返回:** 1459 1460返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1461 1462 1463### OH_JSVM_CompileScript() 1464 1465``` 1466JSVM_EXTERN JSVM_Status OH_JSVM_CompileScript (JSVM_Env env, JSVM_Value script, const uint8_t * cachedData, size_t cacheDataLength, bool eagerCompile, bool * cacheRejected, JSVM_Script * result ) 1467``` 1468 1469**描述** 1470 1471编译一串JavaScript代码,并返回编译后的脚本。 1472 1473**起始版本:** 11 1474 1475**参数:** 1476 1477| 名称 | 描述 | 1478| -------- | -------- | 1479| env | 目标环境,JSVM-API接口将在该环境下调用。 | 1480| script | 包含要编译的脚本的JavaScript代码。 | 1481| cachedData | 可选。脚本的代码缓存数据。 | 1482| cacheDataLength | cachedData数组的长度。 | 1483| eagerCompile | 是否立即编译脚本。 | 1484| cacheRejected | 代码缓存是否被编译拒绝。 | 1485| result | 编译后的脚本。 | 1486 1487**返回:** 1488 1489返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1490 1491JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 1492 1493JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 1494 1495 1496### OH_JSVM_CompileScriptWithOptions() 1497 1498``` 1499JSVM_EXTERN JSVM_Status OH_JSVM_CompileScriptWithOptions (JSVM_Env env, JSVM_Value script, size_t optionCount, JSVM_CompileOptions options[], JSVM_Value * result ) 1500``` 1501 1502**描述** 1503 1504编译一串JavaScript代码,并返回编译后的脚本。 1505 1506**起始版本:** 12 1507 1508**参数:** 1509 1510| 名称 | 描述 | 1511| -------- | -------- | 1512| env | 目标环境,JSVM-API接口将在该环境下调用。 | 1513| script | 包含要编译的脚本的JavaScript代码。 | 1514| optionCount | 传入的 option 数组的长度。 | 1515| options | option 数组,存放所有的编译选项。 | 1516| result | 编译后的脚本。 | 1517 1518**返回:** 1519 1520返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1521 1522JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 1523 1524JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 1525 1526 1527### OH_JSVM_CompileScriptWithOrigin() 1528 1529``` 1530JSVM_EXTERN JSVM_Status OH_JSVM_CompileScriptWithOrigin (JSVM_Env env, JSVM_Value script, const uint8_t * cachedData, size_t cacheDataLength, bool eagerCompile, bool * cacheRejected, JSVM_ScriptOrigin * origin, JSVM_Script * result ) 1531``` 1532 1533**描述** 1534 1535编译一串包含 sourcemap 信息的 JavaScript 代码,并返回编译后的脚本。 1536 1537**起始版本:** 12 1538 1539**参数:** 1540 1541| 名称 | 描述 | 1542| -------- | -------- | 1543| env | 目标环境,JSVM-API接口将在该环境下调用。 | 1544| script | 包含要编译的脚本的JavaScript代码。 | 1545| cachedData | 可选。脚本的代码缓存数据。 | 1546| cacheDataLength | cachedData数组的长度。 | 1547| eagerCompile | 是否立即编译脚本。 | 1548| cacheRejected | 代码缓存是否被编译拒绝。 | 1549| origin | 源代码信息,包括 source map 的位置和源代码文件名等信息 | 1550| result | 编译后的脚本。 | 1551 1552**返回:** 1553 1554返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1555 1556JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 1557 1558JSVM_GENERIC_FAILURE 表示执行失败。 1559 1560 1561### OH_JSVM_CompileWasmFunction() 1562 1563``` 1564JSVM_EXTERN JSVM_Status OH_JSVM_CompileWasmFunction (JSVM_Env env, JSVM_Value wasmModule, uint32_t functionIndex, JSVM_WasmOptLevel optLevel ) 1565``` 1566 1567**描述** 1568 1569对当前 WebAssembly 模块中指定索引的函数进行指定优化等级的编译优化。 1570 1571**起始版本:** 12 1572 1573**参数:** 1574 1575| 名称 | 描述 | 1576| -------- | -------- | 1577| env | 调用 JSVM-API 的环境。 | 1578| wasmModule | 待编译函数所在的 WebAssembly 模块。 | 1579| functionIndex | 待编译函数的索引,索引必须位于合法范围。 | 1580| optLevel | 优化等级,当前只支持高优化等级。 | 1581 1582**返回:** 1583 1584返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1585 1586JSVM_INVALID_ARG 表示 env 或 wasmModule 参数为空,或 wasmModule 不是一个真正的 WebAssembly 模块。 1587 1588JSVM_GENERIC_FAILURE 表示函数索引越界,或编译失败。 1589 1590JSVM_PENDING_EXCEPTION 表示发生了异常。 1591 1592 1593### OH_JSVM_CompileWasmModule() 1594 1595``` 1596JSVM_EXTERN JSVM_Status OH_JSVM_CompileWasmModule (JSVM_Env env, const uint8_t * wasmBytecode, size_t wasmBytecodeLength, const uint8_t * cacheData, size_t cacheDataLength, bool * cacheRejected, JSVM_Value * wasmModule ) 1597``` 1598 1599**描述** 1600 1601将 WebAssembly 字节码编译得到一个 WebAssembly 模块。 如果提供了 WebAssembly 缓存,则会先尝试对缓存进行反序列化。 1602 1603**起始版本:** 12 1604 1605**参数:** 1606 1607| 名称 | 描述 | 1608| -------- | -------- | 1609| env | 调用 JSVM-API 的环境。 | 1610| wasmBytecode | WebAssembly 字节码。 | 1611| wasmBytecodeLength | WebAssembly 字节码的长度,单位:字节。 | 1612| cacheData | 可选的 WebAssembly 缓存。 | 1613| cacheDataLength | 可选的 WebAssembly 缓存长度,单位:字节。 | 1614| cacheRejected | 输出参数,表示提供的 WebAssembly 缓存是否被引擎拒绝。 | 1615| wasmModule | 输出参数,表示生成的 WebAssembly 模块。 | 1616 1617**返回:** 1618 1619返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1620 1621JSVM_INVALID_ARG 表示 env 或 wasmBytecode 参数为空,或传入的数据长度参数无效。 1622 1623JSVM_GENERIC_FAILURE 表示编译失败。 1624 1625JSVM_PENDING_EXCEPTION 表示发生了异常。 1626 1627 1628### OH_JSVM_CreateArray() 1629 1630``` 1631JSVM_EXTERN JSVM_Status OH_JSVM_CreateArray (JSVM_Env env, JSVM_Value * result ) 1632``` 1633 1634**描述** 1635 1636返回对应于JavaScript Array类型的JSVM-API值。 1637 1638**起始版本:** 11 1639 1640**参数:** 1641 1642| 名称 | 描述 | 1643| -------- | -------- | 1644| env | 调用JSVM-API的环境。 | 1645| result | 代表JavaScript Array的JSVM_Value。 | 1646 1647**返回:** 1648 1649返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1650 1651 1652### OH_JSVM_CreateArraybuffer() 1653 1654``` 1655JSVM_EXTERN JSVM_Status OH_JSVM_CreateArraybuffer (JSVM_Env env, size_t byteLength, void ** data, JSVM_Value * result ) 1656``` 1657 1658**描述** 1659 1660返回JavaScript ArrayBuffer类型对应的JSVM-API值。ArrayBuffer用于 表示固定长度的二进制数据缓冲区。通常用作TypedArray对象的后备缓冲区。 分配的ArrayBuffer有一个底层字节缓冲区,其大小由传入的length参数决定。 底层缓冲区可选择返回给调用方,调用方可直接操作该缓冲区。 此缓冲区只能直接从native代码写入。如果想从JavaScript写入该缓冲区, 需创建TypedArray或DataView对象。 1661 1662**起始版本:** 11 1663 1664**参数:** 1665 1666| 名称 | 描述 | 1667| -------- | -------- | 1668| env | 调用JSVM-API的环境。 | 1669| byteLength | 要创建的数组缓冲区的字节长度。 | 1670| data | 指向ArrayBuffer的底层字节缓冲区的指针。data可以选择性地通过传递NULL来忽略。 | 1671| result | 代表JavaScript ArrayBuffer的JSVM_Value。 | 1672 1673**返回:** 1674 1675返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1676 1677 1678### OH_JSVM_CreateArrayBufferFromBackingStoreData() 1679 1680``` 1681JSVM_Status JSVM_CDECL OH_JSVM_CreateArrayBufferFromBackingStoreData (JSVM_Env env, void * data, size_t backingStoreSize, size_t offset, size_t arrayBufferSize, JSVM_Value * result ) 1682``` 1683 1684**描述** 1685 1686在申请得到的 BackingStore 内存上创建 array buffer。 1687 1688**起始版本:** 12 1689 1690**参数:** 1691 1692| 名称 | 描述 | 1693| -------- | -------- | 1694| env | 调用JSVM-API的环境。 | 1695| data | 申请得到的 BackingStore 内存。 | 1696| backingStoreSize | BackingStore 内存的大小。 | 1697| offset | array buffer 在这段内存上的起始位置与内存头之间的相对偏移,单位是字节。 | 1698| arrayBufferSize | array buffer 的大小,单位是字节。 | 1699| result | 接收 array buffer 地址的指针。 | 1700 1701**返回:** 1702 1703返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1704 1705JSVM_INVALID_ARG 表示触发了下面描述的异常情况之一: 1706 17071. offset + arrayBufferSize > backingStoreSize 1708 17092. backingStoreSize 或者 arrayBufferSize 为 0 1710 17113. data 或者 result 为空 1712 1713 1714### OH_JSVM_CreateArrayWithLength() 1715 1716``` 1717JSVM_EXTERN JSVM_Status OH_JSVM_CreateArrayWithLength (JSVM_Env env, size_t length, JSVM_Value * result ) 1718``` 1719 1720**描述** 1721 1722返回对应于JavaScript Array类型的JSVM-API值。Array 的长度属性设置为传入的长度参数。但是,不保证底层缓冲区在创建 数组时由VM预先分配。该行为留给底层VM实现。 1723 1724**起始版本:** 11 1725 1726**参数:** 1727 1728| 名称 | 描述 | 1729| -------- | -------- | 1730| env | 调用JSVM-API的环境。 | 1731| length | 数组的初始长度。 | 1732| result | 代表JavaScript Array的JSVM_Value。 | 1733 1734**返回:** 1735 1736返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1737 1738 1739### OH_JSVM_CreateBigintInt64() 1740 1741``` 1742JSVM_EXTERN JSVM_Status OH_JSVM_CreateBigintInt64 (JSVM_Env env, int64_t value, JSVM_Value * result ) 1743``` 1744 1745**描述** 1746 1747将C int64_t类型的值转换为JavaScript BigInt类型。 1748 1749**起始版本:** 11 1750 1751**参数:** 1752 1753| 名称 | 描述 | 1754| -------- | -------- | 1755| env | 调用JSVM-API的环境。 | 1756| value | 要在JavaScript中表现的整数值。 | 1757| result | 表示JavaScript BigInt类型的JSVM_Value。 | 1758 1759**返回:** 1760 1761返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1762 1763 1764### OH_JSVM_CreateBigintUint64() 1765 1766``` 1767JSVM_EXTERN JSVM_Status OH_JSVM_CreateBigintUint64 (JSVM_Env env, uint64_t value, JSVM_Value * result ) 1768``` 1769 1770**描述** 1771 1772将C uint64_t类型的值转换为JavaScript BigInt类型。 1773 1774**起始版本:** 11 1775 1776**参数:** 1777 1778| 名称 | 描述 | 1779| -------- | -------- | 1780| env | 调用JSVM-API的环境。 | 1781| value | 要在JavaScript中表示的无符号整数值。 | 1782| result | 代表JavaScript BigInt类型的JSVM_Value。 | 1783 1784**返回:** 1785 1786返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1787 1788 1789### OH_JSVM_CreateBigintWords() 1790 1791``` 1792JSVM_EXTERN JSVM_Status OH_JSVM_CreateBigintWords (JSVM_Env env, int signBit, size_t wordCount, const uint64_t * words, JSVM_Value * result ) 1793``` 1794 1795**描述** 1796 1797将一组无符号64位字转换为单个BigInt值。 1798 1799**起始版本:** 11 1800 1801**参数:** 1802 1803| 名称 | 描述 | 1804| -------- | -------- | 1805| env | 调用JSVM-API的环境。 | 1806| signBit | 确定生成的BigInt是正数还是负数。 | 1807| wordCount | words数组的长度。 | 1808| words | uint64_t little-endian 64位字数组。 | 1809| result | 代表JavaScript BigInt类型的JSVM_Value。 | 1810 1811**返回:** 1812 1813返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1814 1815JSVM_INVALID_ARG 表示传入的参数不合法。 1816 1817JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 1818 1819 1820### OH_JSVM_CreateCodeCache() 1821 1822``` 1823JSVM_EXTERN JSVM_Status OH_JSVM_CreateCodeCache (JSVM_Env env, JSVM_Script script, const uint8_t ** data, size_t * length ) 1824``` 1825 1826**描述** 1827 1828为编译后的脚本创建代码缓存。 1829 1830**起始版本:** 11 1831 1832**参数:** 1833 1834| 名称 | 描述 | 1835| -------- | -------- | 1836| env | 目标环境,JSVM-API接口将在该环境下调用。 | 1837| script | 目标编译脚本。 | 1838| data | 代码缓存的数据。 | 1839| length | 代码缓存数据的长度。 | 1840 1841**返回:** 1842 1843返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1844 1845JSVM_GENERIC_FAILURE 表示执行失败。 1846 1847 1848### OH_JSVM_CreateDataview() 1849 1850``` 1851JSVM_EXTERN JSVM_Status OH_JSVM_CreateDataview (JSVM_Env env, size_t length, JSVM_Value arraybuffer, size_t byteOffset, JSVM_Value * result ) 1852``` 1853 1854**描述** 1855 1856基于已有的ArrayBuffer对象,创建一个JavaScript DataView对象。DataView 对象在底层数据缓冲区上提供了一个类似数组的视图,其中的元素可以具有不同的大小和类型。 要求:二进制的length + byteOffset 小于或等于传入的数组的大小(以字节为单位)。否则,将抛出范围错误(RangeError)。 1857 1858**起始版本:** 11 1859 1860**参数:** 1861 1862| 名称 | 描述 | 1863| -------- | -------- | 1864| env | 调用JSVM-API的环境。 | 1865| length | DataView中的元素个数。 | 1866| arraybuffer | 位于DataView底层的ArrayBuffer。 | 1867| byteOffset | ArrayBuffer中的字节偏移量,指示投影DataView的开始位置。 | 1868| result | 表示JavaScript DataView对象的JSVM_Value。 | 1869 1870**返回:** 1871 1872返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1873 1874 1875### OH_JSVM_CreateDate() 1876 1877``` 1878JSVM_EXTERN JSVM_Status OH_JSVM_CreateDate (JSVM_Env env, double time, JSVM_Value * result ) 1879``` 1880 1881**描述** 1882 1883分配一个JavaScript Date对象。此API不处理闰秒。 这是因为ECMAScript遵循POSIX时间规范,对闰秒进行忽略。 1884 1885**起始版本:** 11 1886 1887**参数:** 1888 1889| 名称 | 描述 | 1890| -------- | -------- | 1891| env | 调用JSVM-API的环境。 | 1892| time | 自1970年1月1日UTC以来的ECMAScript时间值(以毫秒为单位)。 | 1893| result | 表示JavaScript Date对象的JSVM_Value。 | 1894 1895**返回:** 1896 1897返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1898 1899JSVM_GENERIC_FAILURE 表示执行失败。 1900 1901 1902### OH_JSVM_CreateDouble() 1903 1904``` 1905JSVM_EXTERN JSVM_Status OH_JSVM_CreateDouble (JSVM_Env env, double value, JSVM_Value * result ) 1906``` 1907 1908**描述** 1909 1910将C double类型的值转换为JavaScript number类型。 1911 1912**起始版本:** 11 1913 1914**参数:** 1915 1916| 名称 | 描述 | 1917| -------- | -------- | 1918| env | 调用JSVM-API的环境。 | 1919| value | 要在JavaScript中表现的双精度值。 | 1920| result | 代表JavaScript number类型的JSVM_Value。 | 1921 1922**返回:** 1923 1924返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1925 1926 1927### OH_JSVM_CreateEnv() 1928 1929``` 1930JSVM_EXTERN JSVM_Status OH_JSVM_CreateEnv (JSVM_VM vm, size_t propertyCount, const JSVM_PropertyDescriptor * properties, JSVM_Env * result ) 1931``` 1932 1933**描述** 1934 1935基于新环境上下文的可选属性,创建一个新环境。 1936 1937**起始版本:** 11 1938 1939**参数:** 1940 1941| 名称 | 描述 | 1942| -------- | -------- | 1943| vm | 虚拟机实例,新环境将在该实例中创建。 | 1944| propertyCount | 属性数组中元素的个数。 | 1945| properties | 属性描述符的数组。 | 1946| result | 创建的新环境。 | 1947 1948**返回:** 1949 1950返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1951 1952 1953### OH_JSVM_CreateEnvFromSnapshot() 1954 1955``` 1956JSVM_EXTERN JSVM_Status OH_JSVM_CreateEnvFromSnapshot (JSVM_VM vm, size_t index, JSVM_Env * result ) 1957``` 1958 1959**描述** 1960 1961基于虚拟机的起始快照,创建一个新的环境。 1962 1963**起始版本:** 11 1964 1965**参数:** 1966 1967| 名称 | 描述 | 1968| -------- | -------- | 1969| vm | 虚拟机实例,新环境将在该实例中创建。 | 1970| index | 环境在快照中的索引。 | 1971| result | 创建的新环境。 | 1972 1973**返回:** 1974 1975返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 1976 1977JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 1978 1979 1980### OH_JSVM_CreateError() 1981 1982``` 1983JSVM_EXTERN JSVM_Status OH_JSVM_CreateError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value * result ) 1984``` 1985 1986**描述** 1987 1988返回带有所提供文本的JavaScript Error。 1989 1990**起始版本:** 11 1991 1992**参数:** 1993 1994| 名称 | 描述 | 1995| -------- | -------- | 1996| env | 调用JSVM-API的环境。 | 1997| code | 可选的JSVM_Value,带有与错误关联的错误代码的字符串。 | 1998| msg | 引用JavaScript string用作Error的消息。 | 1999| result | 表示创建的错误。 | 2000 2001**返回:** 2002 2003返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2004 2005JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 2006 2007 2008### OH_JSVM_CreateExternal() 2009 2010``` 2011JSVM_EXTERN JSVM_Status OH_JSVM_CreateExternal (JSVM_Env env, void * data, JSVM_Finalize finalizeCb, void * finalizeHint, JSVM_Value * result ) 2012``` 2013 2014**描述** 2015 2016分配一个带有外部数据的JavaScript值。这用于通过JavaScript代码传递外部数据。 后续可以使用OH_JSVM_GetValueExternal由native代码检索。 该API添加了一个JSVM_Finalize回调,当刚刚创建的JavaScript对象被垃圾回收时将调用该回调。 创建的值不是一个对象,因此不支持附加属性。它被认为是一个独特的值类型: 使用外部值调用OH_JSVM_Typeof()会生成JSVM_EXTERNAL。 2017 2018**起始版本:** 11 2019 2020**参数:** 2021 2022| 名称 | 描述 | 2023| -------- | -------- | 2024| env | 调用JSVM-API的环境。 | 2025| data | 指向外部数据的原始指针。 | 2026| finalizeCb | 收集外部值时调用的可选回调。JSVM_Finalize提供了更多详细信息。 | 2027| finalizeHint | 在收集期间传递给最终回调的可选提示。 | 2028| result | 表示外部值的JSVM_Value。 | 2029 2030**返回:** 2031 2032返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2033 2034 2035### OH_JSVM_CreateFunction() 2036 2037``` 2038JSVM_EXTERN JSVM_Status OH_JSVM_CreateFunction (JSVM_Env env, const char * utf8name, size_t length, JSVM_Callback cb, JSVM_Value * result ) 2039``` 2040 2041**描述** 2042 2043支持在native代码中创建函数对象,这是从JavaScript调用native代码的主要机制。 在此调用之后,新创建的函数在脚本中不再自动可见。相反,必须在JavaScript可见的任何对象上显示设置属性, 才能从脚本访问该函数。 2044 2045**起始版本:** 11 2046 2047**参数:** 2048 2049| 名称 | 描述 | 2050| -------- | -------- | 2051| env | 调用JSVM-API的环境。 | 2052| utf8Name | 编码为UTF8的函数的可选名称。这在JavaScript中是可见的, 作为新函数对象的name属性。 | 2053| length | utf8name的长度(以字节为单位)或JSVM_AUTO_LENGTH(如果以 null 结尾)。 | 2054| cb | 调用此函数对象时应调用的native函数。详情请参考JSVM_Callback。 | 2055| result | 表示新创建函数的JavaScript函数对象。 | 2056 2057**返回:** 2058 2059返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2060 2061 2062### OH_JSVM_CreateFunctionWithScript() 2063 2064``` 2065JSVM_EXTERN JSVM_Status OH_JSVM_CreateFunctionWithScript (JSVM_Env env, const char * funcName, size_t length, size_t argc, const JSVM_Value * argv, JSVM_Value script, JSVM_Value * result ) 2066``` 2067 2068**描述** 2069 2070创建一个以给定JavaScript为函数体的函数。 2071 2072**起始版本:** 12 2073 2074**参数:** 2075 2076| 名称 | 描述 | 2077| -------- | -------- | 2078| env | 调用JSVM-API的环境。 | 2079| funcName | 包含函数名称的字符串。如果传入NULL,则创建一个匿名函数。 | 2080| length | funcName的长度(以字节为单位)或JSVM_AUTO_LENGTH(如果以 null 结尾)。 | 2081| argc | argv数组中的元素个数。 | 2082| argv | JSVM_values数组,表示将作为参数传递给函数的JavaScript值。 | 2083| script | 包含作为函数体的JavaScript字符串。 | 2084| result | 表示新创建函数的JavaScript函数对象的JSVM_Value。 | 2085 2086**返回:** 2087 2088返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2089 2090JSVM_GENERIC_FAILURE 表示输入的JavaScript无法编译成功。 2091 2092 2093### OH_JSVM_CreateInt32() 2094 2095``` 2096JSVM_EXTERN JSVM_Status OH_JSVM_CreateInt32 (JSVM_Env env, int32_t value, JSVM_Value * result ) 2097``` 2098 2099**描述** 2100 2101将C int32_t类型的值转换为JavaScript number类型。 2102 2103**起始版本:** 11 2104 2105**参数:** 2106 2107| 名称 | 描述 | 2108| -------- | -------- | 2109| env | 调用JSVM-API的环境。 | 2110| value | 要在JavaScript中表示的整数值。 | 2111| result | 表示JavaScript number类型的JSVM_Value。 | 2112 2113**返回:** 2114 2115返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2116 2117 2118### OH_JSVM_CreateInt64() 2119 2120``` 2121JSVM_EXTERN JSVM_Status OH_JSVM_CreateInt64 (JSVM_Env env, int64_t value, JSVM_Value * result ) 2122``` 2123 2124**描述** 2125 2126将C int64_t类型的值转换为JavaScript number类型。 2127 2128**起始版本:** 11 2129 2130**参数:** 2131 2132| 名称 | 描述 | 2133| -------- | -------- | 2134| env | 调用JSVM-API的环境。 | 2135| value | 要在JavaScript中表示的整数值。 | 2136| result | 代表JavaScript number类型的JSVM_Value。 | 2137 2138**返回:** 2139 2140返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2141 2142 2143### OH_JSVM_CreateMap() 2144 2145``` 2146JSVM_Status JSVM_CDECL OH_JSVM_CreateMap (JSVM_Env env, JSVM_Value * result ) 2147``` 2148 2149**描述** 2150 2151此API返回与JavaScript Map类型对应的JavaScript值。 2152 2153**起始版本:** 12 2154 2155**参数:** 2156 2157| 名称 | 描述 | 2158| -------- | -------- | 2159| env | 调用JSVM-API的环境。 | 2160| result | 代表JavaScript Map的JSVM_Value。 | 2161 2162**返回:** 2163 2164返回执行状态码JSVM_Status。 JSVM_OK 表示执行成功。 2165 2166JSVM_INVALID_ARG 表示输入参数不合法。 2167 2168 2169### OH_JSVM_CreateObject() 2170 2171``` 2172JSVM_EXTERN JSVM_Status OH_JSVM_CreateObject (JSVM_Env env, JSVM_Value * result ) 2173``` 2174 2175**描述** 2176 2177分配一个默认的JavaScript对象。该函数功能等同于在JavaScript中执行new Object()。 2178 2179**起始版本:** 11 2180 2181**参数:** 2182 2183| 名称 | 描述 | 2184| -------- | -------- | 2185| env | 调用JSVM-API的环境。 | 2186| result | 表示JavaScript对象的JSVM_Value。 | 2187 2188**返回:** 2189 2190返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2191 2192 2193### OH_JSVM_CreatePromise() 2194 2195``` 2196JSVM_EXTERN JSVM_Status OH_JSVM_CreatePromise (JSVM_Env env, JSVM_Deferred * deferred, JSVM_Value * promise ) 2197``` 2198 2199**描述** 2200 2201创建一个延迟对象和一个JavaScript promise。 2202 2203**起始版本:** 11 2204 2205**参数:** 2206 2207| 名称 | 描述 | 2208| -------- | -------- | 2209| env | 调用JSVM-API的环境。 | 2210| deferred | 一个新创建的延迟对象,后续可以传递给OH_JSVM_ResolveDeferred()或 [OH_JSVM_RejectDeferred()](#oh_jsvm_rejectdeferred)以解析resp。或拒绝相关的Promise。 | 2211| promise | 与延迟对象关联的JavaScript Promise。 | 2212 2213**返回:** 2214 2215返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2216 2217JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 2218 2219 2220### OH_JSVM_CreateRangeError() 2221 2222``` 2223JSVM_EXTERN JSVM_Status OH_JSVM_CreateRangeError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value * result ) 2224``` 2225 2226**描述** 2227 2228返回带有所提供文本的JavaScript RangeError。 2229 2230**起始版本:** 11 2231 2232**参数:** 2233 2234| 名称 | 描述 | 2235| -------- | -------- | 2236| env | 调用JSVM-API的环境。 | 2237| code | 可选的JSVM_Value,带有与错误关联的错误代码的字符串。 | 2238| msg | 引用JavaScript string用作Error的消息。 | 2239| result | 表示创建的错误。 | 2240 2241**返回:** 2242 2243返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2244 2245JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 2246 2247 2248### OH_JSVM_CreateReference() 2249 2250``` 2251JSVM_EXTERN JSVM_Status OH_JSVM_CreateReference (JSVM_Env env, JSVM_Value value, uint32_t initialRefcount, JSVM_Ref * result ) 2252``` 2253 2254**描述** 2255 2256对传入的值创建一个具有指定引用计数的新引用。 2257 2258**起始版本:** 11 2259 2260**参数:** 2261 2262| 名称 | 描述 | 2263| -------- | -------- | 2264| env | 调用JSVM-API的环境。 | 2265| value | 正在为其创建引用的JSVM_Value。 | 2266| initialRefcount | 新引用的初始引用计数。 | 2267| result | 指向新的引用。 | 2268 2269**返回:** 2270 2271返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2272 2273 2274### OH_JSVM_CreateRegExp() 2275 2276``` 2277JSVM_Status JSVM_CDECL OH_JSVM_CreateRegExp (JSVM_Env env, JSVM_Value value, JSVM_RegExpFlags flags, JSVM_Value * result ) 2278``` 2279 2280**描述** 2281 2282此API返回与输入对应的正则表达式的JavaScript值。 接口可能会抛出异常。 2283 2284**起始版本:** 12 2285 2286**参数:** 2287 2288| 名称 | 描述 | 2289| -------- | -------- | 2290| env | 调用JSVM-API的环境。 | 2291| value | 要转换为正则表达式的JavaScript字符串。 | 2292| flags | 正则表达式标志位。 | 2293| result | 代表JavaScript RegExp的JSVM_Value。 | 2294 2295**返回:** 2296 2297返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2298 2299JSVM_INVALID_ARG 表示输入参数不合法。 2300 2301**JSVM_PENDING_EXCPTION** 表示API在运行时抛出异常。 2302 2303 2304### OH_JSVM_CreateSet() 2305 2306``` 2307JSVM_EXTERN JSVM_Status OH_JSVM_CreateSet (JSVM_Env env, JSVM_Value * result ) 2308``` 2309 2310**描述** 2311 2312创建JavaScript Set对象。 2313 2314**起始版本:** 12 2315 2316**参数:** 2317 2318| 名称 | 描述 | 2319| -------- | -------- | 2320| env | 调用JSVM-API的环境。 | 2321| result | 表示已经创建的JavaScript Set对象。 | 2322 2323**返回:** 2324 2325返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 2326 2327JSVM_INVALID_ARG 表示输入参数不合法。 2328 2329 2330### OH_JSVM_CreateSnapshot() 2331 2332``` 2333JSVM_EXTERN JSVM_Status OH_JSVM_CreateSnapshot (JSVM_VM vm, size_t contextCount, const JSVM_Env * contexts, const char ** blobData, size_t * blobSize ) 2334``` 2335 2336**描述** 2337 2338创建虚拟机的启动快照。 2339 2340**起始版本:** 11 2341 2342**参数:** 2343 2344| 名称 | 描述 | 2345| -------- | -------- | 2346| vm | 目标环境,API接口将在该环境下调用。 | 2347| contextCount | 上下文个数。 | 2348| contexts | 要添加到快照的上下文数组。 | 2349| blobData | 快照数据。 | 2350| blobSize | 快照数据的大小。 | 2351 2352**返回:** 2353 2354返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2355 2356JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 2357 2358 2359### OH_JSVM_CreateStringLatin1() 2360 2361``` 2362JSVM_EXTERN JSVM_Status OH_JSVM_CreateStringLatin1 (JSVM_Env env, const char * str, size_t length, JSVM_Value * result ) 2363``` 2364 2365**描述** 2366 2367将采用ISO-8859-1编码的C字符串转换为JavaScript string值。 复制原生字符串。 2368 2369**起始版本:** 11 2370 2371**参数:** 2372 2373| 名称 | 描述 | 2374| -------- | -------- | 2375| env | 调用JSVM-API的环境。 | 2376| str | 表示ISO-8859-1编码的字符串的字符缓冲区。 | 2377| length | 字符串的长度,以字节为单位。如果它以null结尾,则为JSVM_AUTO_LENGTH。 | 2378| result | 表示JavaScript字符串的JSVM_Value。 | 2379 2380**返回:** 2381 2382返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2383 2384 2385### OH_JSVM_CreateStringUtf16() 2386 2387``` 2388JSVM_EXTERN JSVM_Status OH_JSVM_CreateStringUtf16 (JSVM_Env env, const char16_t * str, size_t length, JSVM_Value * result ) 2389``` 2390 2391**描述** 2392 2393将采用UTF16-LE编码的C字符串转换为JavaScript字符串值。 复制原生字符串。 2394 2395**起始版本:** 11 2396 2397**参数:** 2398 2399| 名称 | 描述 | 2400| -------- | -------- | 2401| env | 调用JSVM-API的环境。 | 2402| str | 表示UTF16-LE编码的字符串的字符缓冲区。 | 2403| length | 以两字节代码单元表示的字符串长度,如果它以null终止,则为JSVM_AUTO_LENGTH。 | 2404| result | 代表JavaScript string的JSVM_Value。 | 2405 2406**返回:** 2407 2408返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2409 2410 2411### OH_JSVM_CreateStringUtf8() 2412 2413``` 2414JSVM_EXTERN JSVM_Status OH_JSVM_CreateStringUtf8 (JSVM_Env env, const char * str, size_t length, JSVM_Value * result ) 2415``` 2416 2417**描述** 2418 2419从UTF8编码的C字符串创建JavaScript string值。 复制原生字符串。 2420 2421**起始版本:** 11 2422 2423**参数:** 2424 2425| 名称 | 描述 | 2426| -------- | -------- | 2427| env | 调用JSVM-API的环境。 | 2428| str | 表示UTF8编码字符串的字符缓冲区。 | 2429| length | 字符串的长度,以字节为单位。如果字符串以null结尾,则为JSVM_AUTO_LENGTH。 | 2430| result | 代表JavaScript字符串的JSVM_Value。 | 2431 2432**返回:** 2433 2434返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2435 2436 2437### OH_JSVM_CreateSymbol() 2438 2439``` 2440JSVM_EXTERN JSVM_Status OH_JSVM_CreateSymbol (JSVM_Env env, JSVM_Value description, JSVM_Value * result ) 2441``` 2442 2443**描述** 2444 2445从UTF8 编码的C字符串创建JavaScript symbol值。 2446 2447**起始版本:** 11 2448 2449**参数:** 2450 2451| 名称 | 描述 | 2452| -------- | -------- | 2453| env | 调用JSVM-API的环境。 | 2454| description | 可选的JSVM_Value,它指的是要设置为符号描述的JavaScript string。 | 2455| result | 代表JavaScript symbol的JSVM_Value。 | 2456 2457**返回:** 2458 2459返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2460 2461JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 2462 2463 2464### OH_JSVM_CreateSyntaxError() 2465 2466``` 2467JSVM_EXTERN JSVM_Status OH_JSVM_CreateSyntaxError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value * result ) 2468``` 2469 2470**描述** 2471 2472返回带有所提供文本的JavaScript SyntaxError。 2473 2474**起始版本:** 11 2475 2476**参数:** 2477 2478| 名称 | 描述 | 2479| -------- | -------- | 2480| env | 调用JSVM-API的环境。 | 2481| code | 可选的JSVM_Value,带有与错误关联的错误代码的字符串。 | 2482| msg | 引用JavaScript string用作Error的消息。 | 2483| result | 表示创建的错误。 | 2484 2485**返回:** 2486 2487返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2488 2489JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 2490 2491\* 2492 2493 2494### OH_JSVM_CreateTypedarray() 2495 2496``` 2497JSVM_EXTERN JSVM_Status OH_JSVM_CreateTypedarray (JSVM_Env env, JSVM_TypedarrayType type, size_t length, JSVM_Value arraybuffer, size_t byteOffset, JSVM_Value * result ) 2498``` 2499 2500**描述** 2501 2502基于已有的ArrayBuffer对象,创建一个JavaScript TypedArray对象。TypedArray 对象在底层数据缓冲区上提供了一个类似数组的视图,其中每个元素都具有 相同的底层二进制标量数据类型。要求:(length\* 元素大小)+ byteOffset 小于等于传入的数组的大小(以字节为单位)。否则,将抛出范围错误(RangeError)。 2503 2504**起始版本:** 11 2505 2506**参数:** 2507 2508| 名称 | 描述 | 2509| -------- | -------- | 2510| env | 调用JSVM-API的环境。 | 2511| type | TypedArray中元素的标量数据类型。 | 2512| length | TypedArray中的元素个数。 | 2513| arraybuffer | ArrayBuffer是类型化数组的基础。 | 2514| byteOffset | ArrayBuffer中开始投影TypedArray的字节偏移量。 | 2515| result | 表示JavaScript TypedArray的JSVM_Value。 | 2516 2517**返回:** 2518 2519返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2520 2521JSVM_INVALID_ARG 表示传入的参数不合法。 2522 2523 2524### OH_JSVM_CreateTypeError() 2525 2526``` 2527JSVM_EXTERN JSVM_Status OH_JSVM_CreateTypeError (JSVM_Env env, JSVM_Value code, JSVM_Value msg, JSVM_Value * result ) 2528``` 2529 2530**描述** 2531 2532返回带有所提供文本的JavaScript TypeError。 2533 2534**起始版本:** 11 2535 2536**参数:** 2537 2538| 名称 | 描述 | 2539| -------- | -------- | 2540| env | 调用JSVM-API的环境。 | 2541| code | 可选的JSVM_Value,带有与错误关联的错误代码的字符串。 | 2542| msg | 引用JavaScript string用作Error的消息。 | 2543| result | 表示创建的错误。 | 2544 2545**返回:** 2546 2547返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2548 2549JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 2550 2551 2552### OH_JSVM_CreateUint32() 2553 2554``` 2555JSVM_EXTERN JSVM_Status OH_JSVM_CreateUint32 (JSVM_Env env, uint32_t value, JSVM_Value * result ) 2556``` 2557 2558**描述** 2559 2560将C uint32_t类型的值转换为JavaScript number类型。 2561 2562**起始版本:** 11 2563 2564**参数:** 2565 2566| 名称 | 描述 | 2567| -------- | -------- | 2568| env | 调用JSVM-API的环境。 | 2569| value | 要在JavaScript中表示的无符号整数值。 | 2570| result | 表示JavaScript number类型的JSVM_Value。 | 2571 2572**返回:** 2573 2574返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2575 2576 2577### OH_JSVM_CreateVM() 2578 2579``` 2580JSVM_EXTERN JSVM_Status OH_JSVM_CreateVM (const JSVM_CreateVMOptions * options, JSVM_VM * result ) 2581``` 2582 2583**描述** 2584 2585创建一个虚拟机实例。 2586 2587**起始版本:** 11 2588 2589**参数:** 2590 2591| 名称 | 描述 | 2592| -------- | -------- | 2593| options | 用于创建虚拟机实例的选项。 | 2594| result | 新的虚拟机实例。 | 2595 2596**返回:** 2597 2598返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2599 2600JSVM_INVALID_ARG 表示传入的参数不合法。 2601 2602 2603### OH_JSVM_SetMicrotaskPolicy() 2604 2605``` 2606JSVM_EXTERN JSVM_Status OH_JSVM_SetMicrotaskPolicy(JSVM_VM vm, JSVM_MicrotaskPolicy policy) 2607``` 2608 2609**描述** 2610 2611用于设置虚拟机实例的微任务执行策略。<br/>如果该方法未被调用,虚拟机实例的默认策略为 JSVM_MicrotaskPolicy::JSVM_MICROTASK_AUTO。 2612 2613**起始版本:** 18 2614 2615**参数:** 2616 2617| 名称 | 描述 | 2618| -------- | -------- | 2619| vm | 用于设置微任务执行策略的虚拟机实例。 | 2620| policy | 执行微任务的策略。 | 2621 2622**返回:** 2623 2624如果接口调用成功,返回 JSVM_OK。 2625 2626 2627### OH_JSVM_CreateWasmCache() 2628 2629``` 2630JSVM_EXTERN JSVM_Status OH_JSVM_CreateWasmCache (JSVM_Env env, JSVM_Value wasmModule, const uint8_t ** data, size_t * length ) 2631``` 2632 2633**描述** 2634 2635为给定的 WebAssembly 模块生成缓存。 2636 2637**起始版本:** 12 2638 2639**参数:** 2640 2641| 名称 | 描述 | 2642| -------- | -------- | 2643| env | 调用 JSVM-API 的环境。 | 2644| wasmModule | 编译好的 WebAssembly 模块。 | 2645| data | 输出参数,表示生成的 WebAssembly 缓存。 | 2646| length | 输出参数,表示生成的 WebAssembly 缓存的长度,单位:字节。 | 2647 2648**返回:** 2649 2650返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2651 2652JSVM_INVALID_ARG 表示传入了空指针参数。 2653 2654JSVM_GENERIC_FAILURE 表示缓存生成失败。 2655 2656 2657### OH_JSVM_DefineClass() 2658 2659``` 2660JSVM_EXTERN JSVM_Status OH_JSVM_DefineClass (JSVM_Env env, const char * utf8name, size_t length, JSVM_Callback constructor, size_t propertyCount, const JSVM_PropertyDescriptor * properties, JSVM_Value * result ) 2661``` 2662 2663**描述** 2664 2665定义一个JavaScript类。 2666 2667**起始版本:** 11 2668 2669**参数:** 2670 2671| 名称 | 描述 | 2672| -------- | -------- | 2673| env | 调用JSVM-API的环境。 | 2674| utf8name | JavaScript构造函数的名称,建议在包装C++类时使用C++类名。 | 2675| length | utf8name的长度(以字节为单位)或JSVM_AUTO_LENGTH(如果以 null 结尾)。 | 2676| constructor | 用于创建类的构造函数的回调函数。包装C++类时,此方法必须是符合JSVM_Callback。 callback签名的静态成员。不能使用C++类构造函数。详情请参考JSVM_Callback。 | 2677| propertyCount | properties数组参数中的项数。 | 2678| properties | 类的属性描述符,用于定义类的属性和方法。 | 2679| result | 表示类的构造函数的JSVM_Value。 | 2680 2681**返回:** 2682 2683返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2684 2685 2686### OH_JSVM_DefineClassWithPropertyHandler() 2687 2688``` 2689JSVM_EXTERN JSVM_Status OH_JSVM_DefineClassWithPropertyHandler (JSVM_Env env, const char * utf8name, size_t length, JSVM_Callback constructor, size_t propertyCount, const JSVM_PropertyDescriptor * properties, JSVM_PropertyHandlerCfg propertyHandlerCfg, JSVM_Callback callAsFunctionCallback, JSVM_Value * result ) 2690``` 2691 2692**描述** 2693 2694定义一个具有给定类名、构造函数、属性和回调处理程序的JavaScript类属性操作包括getter、setter、deleter、enumerator等,并作为函数回调进行调用。 2695 2696**起始版本:** 12 2697 2698**参数:** 2699 2700| 名称 | 描述 | 2701| -------- | -------- | 2702| env | 调用JSVM-API的环境。 | 2703| utf8name | JavaScript类构造函数的名称。 | 2704| length | utf8name的长度(以字节为单位)或JSVM_AUTO_LENGTH(如果以 null 结尾)。 | 2705| constructor | 用于创建类的构造函数的回调函数。此方法必须是JSVM_Callback类型。 constructor中callback回调需为静态成员。不能使用C++类构造函数。详情请参考JSVM_Callback。 | 2706| propertyCount | properties数组参数中的项数。 | 2707| properties | 描述静态数据和实例数据的属性描述符数组类上的属性、访问器和方法请参考JSVM_PropertyDescriptor。 | 2708| propertyHandlerCfg | 访问实例对象属性触发相应的回调函数。 | 2709| callAsFunctionCallback | 将实例对象作为函数调用将触发此回调。 | 2710| result | 表示JavaScript类的构造函数的JSVM_Value。 | 2711 2712**返回:** 2713 2714返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2715 2716JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 2717 2718 2719### OH_JSVM_DefineProperties() 2720 2721``` 2722JSVM_EXTERN JSVM_Status OH_JSVM_DefineProperties (JSVM_Env env, JSVM_Value object, size_t propertyCount, const JSVM_PropertyDescriptor * properties ) 2723``` 2724 2725**描述** 2726 2727通过此方法可以在给定对象上高效定义多个属性, 这些属性使用属性描述符进行定义。通过一个属性描述符的数组, 此API将为对象依次设置数组中的属性。 2728 2729**起始版本:** 11 2730 2731**参数:** 2732 2733| 名称 | 描述 | 2734| -------- | -------- | 2735| env | 调用JSVM-API的环境。 | 2736| object | 待进行属性检索的对象。 | 2737| propertyCount | properties数组中的元素数。 | 2738| properties | 属性描述符的数组。 | 2739 2740**返回:** 2741 2742返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2743 2744JSVM_INVALID_ARG 表示传入的参数不合法。 2745 2746JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 2747 2748 2749### OH_JSVM_DeleteElement() 2750 2751``` 2752JSVM_EXTERN JSVM_Status OH_JSVM_DeleteElement (JSVM_Env env, JSVM_Value object, uint32_t index, bool * result ) 2753``` 2754 2755**描述** 2756 2757尝试从object中删除指定index处的元素。 2758 2759**起始版本:** 11 2760 2761**参数:** 2762 2763| 名称 | 描述 | 2764| -------- | -------- | 2765| env | 调用JSVM-API的环境。 | 2766| object | 待查询的对象。 | 2767| index | 要删除的属性的索引。 | 2768| result | 表示元素删除是否成功。 | 2769 2770**返回:** 2771 2772返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2773 2774JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 2775 2776 2777### OH_JSVM_DeleteProperty() 2778 2779``` 2780JSVM_EXTERN JSVM_Status OH_JSVM_DeleteProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, bool * result ) 2781``` 2782 2783**描述** 2784 2785尝试从object中删除key自己的属性。 2786 2787**起始版本:** 11 2788 2789**参数:** 2790 2791| 名称 | 描述 | 2792| -------- | -------- | 2793| env | 调用JSVM-API的环境。 | 2794| object | 待查询的对象。 | 2795| key | 待删除的属性名。 | 2796| result | 表示属性删除是否成功。result可以选择性地通过传递NULL来忽略。 | 2797 2798**返回:** 2799 2800返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2801 2802JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 2803 2804 2805### OH_JSVM_DeleteReference() 2806 2807``` 2808JSVM_EXTERN JSVM_Status OH_JSVM_DeleteReference (JSVM_Env env, JSVM_Ref ref ) 2809``` 2810 2811**描述** 2812 2813删除传入的引用。 2814 2815**起始版本:** 11 2816 2817**参数:** 2818 2819| 名称 | 描述 | 2820| -------- | -------- | 2821| env | 调用JSVM-API的环境。 | 2822| ref | 需删除的JSVM_Ref。 | 2823 2824**返回:** 2825 2826返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2827 2828 2829### OH_JSVM_DestroyEnv() 2830 2831``` 2832JSVM_EXTERN JSVM_Status OH_JSVM_DestroyEnv (JSVM_Env env) 2833``` 2834 2835**描述** 2836 2837销毁环境。 2838 2839**起始版本:** 11 2840 2841**参数:** 2842 2843| 名称 | 描述 | 2844| -------- | -------- | 2845| env | 待销毁的环境。 | 2846 2847**返回:** 2848 2849返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2850 2851 2852### OH_JSVM_DestroyVM() 2853 2854``` 2855JSVM_EXTERN JSVM_Status OH_JSVM_DestroyVM (JSVM_VM vm) 2856``` 2857 2858**描述** 2859 2860销毁一个虚拟机实例。 2861 2862**起始版本:** 11 2863 2864**参数:** 2865 2866| 名称 | 描述 | 2867| -------- | -------- | 2868| vm | 待销毁的虚拟机实例。 | 2869 2870**返回:** 2871 2872返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 2873 2874 2875### OH_JSVM_CreateProxy() 2876 2877``` 2878JSVM_EXTERN JSVM_Status OH_JSVM_CreateProxy(JSVM_Env env, JSVM_Value target, JSVM_Value handler, JSVM_Value* result) 2879``` 2880 2881**描述** 2882 2883创建 JavaScript Proxy。<br/>该接口等价于在 JavaScript 中执行 new Proxy(target, handler)。 2884 2885**起始版本:** 18 2886 2887**参数:** 2888 2889| 名称 | 描述 | 2890| -------- | -------- | 2891| env | 调用 JSVM-API 的环境。 | 2892| target | 表示用于创建代理的 JavaScript 对象。 | 2893| handler | 表示定义了拦截什么操作及如何处理被拦截操作的 JavaScript 对象。 | 2894| result | 表示创建的 JavaScript 代理。 | 2895 2896**返回:** 2897 2898返回执行状态码。<br/> 2899JSVM_OK 表示接口调用成功。<br/> 2900JSVM_INVALID_ARG 如果任意参数为空。<br/> 2901JSVM_OBJECT_EXPECTED 如果 target 或 handler 非 JS 对象。<br/> 2902JSVM_PENDING_EXCEPTION 如果存在待处理的 JS 异常。 2903 2904 2905### OH_JSVM_IsProxy() 2906 2907``` 2908JSVM_Status JSVM_CDECL OH_JSVM_IsProxy(JSVM_Env env, JSVM_Value value, bool* isProxy) 2909``` 2910 2911**描述** 2912 2913判断传入的值是否为 JavaScript Proxy。 2914 2915**起始版本:** 18 2916 2917**参数:** 2918 2919| 名称 | 描述 | 2920| -------- | -------- | 2921| env | 调用 JSVM-API 的环境。 | 2922| value | 需要检查的值。 | 2923| isProxy | isProxy 表示是否为 JavaScript Proxy。 | 2924 2925**返回:** 2926 2927返回执行状态码。<br/>JSVM_OK 表示接口调用成功。<br/>JSVM_INVALID_ARG 如果任意参数为空。 2928 2929 2930### OH_JSVM_ProxyGetTarget() 2931 2932``` 2933JSVM_Status JSVM_CDECL OH_JSVM_ProxyGetTarget(JSVM_Env env, JSVM_Value value, JSVM_Value* result) 2934``` 2935 2936**描述** 2937 2938获取 JavaScript Proxy 中的目标对象。 2939 2940**起始版本:** 18 2941 2942**参数:** 2943 2944| 名称 | 描述 | 2945| -------- | -------- | 2946| env | 调用 JSVM-API 的环境。 | 2947| value | 需要获取目标对象的代理。 | 2948| result | 代理的目标对象。 | 2949 2950**返回:** 2951 2952返回执行状态码。<br/>JSVM_OK 表示接口调用成功。<br/>JSVM_INVALID_ARG 如果任意参数为空。<br/>JSVM_INVALID_TYPE 如果 value 非 Javascript Proxy。 2953 2954 2955### OH_JSVM_DetachArraybuffer() 2956 2957``` 2958JSVM_EXTERN JSVM_Status OH_JSVM_DetachArraybuffer (JSVM_Env env, JSVM_Value arraybuffer ) 2959``` 2960 2961**描述** 2962 2963提供类似于调用ArrayBuffer detach操作的行为。 2964 2965**起始版本:** 11 2966 2967**参数:** 2968 2969| 名称 | 描述 | 2970| -------- | -------- | 2971| env | 调用JSVM-API的环境。 | 2972| arraybuffer | 待分离的JavaScript ArrayBuffer。 | 2973 2974**返回:** 2975 2976返回执行状态码 JSVM_Status。 如果JSVM_OK 表示执行成功。 2977 2978JSVM_DETACHABLE_ARRAYBUFFER_EXPECTED 表示传入的参数不是可分析的ArrayBuffer。 2979 2980 2981### OH_JSVM_Equals() 2982 2983``` 2984JSVM_EXTERN JSVM_Status OH_JSVM_Equals (JSVM_Env env, JSVM_Value lhs, JSVM_Value rhs, bool * result ) 2985``` 2986 2987**描述** 2988 2989提供类似调用宽松相等算法的行为。 无论JavaScript值类型如何,只要值相等,就返回true。 2990 2991**起始版本:** 12 2992 2993**参数:** 2994 2995| 名称 | 描述 | 2996| -------- | -------- | 2997| env | 调用JSVM-API的环境。 | 2998| lhs | 待检查的JavaScript值。 | 2999| rhs | 要检查的JavaScript值。 | 3000| result | 表示两个JSVM_Value对象是否相等。 | 3001 3002**返回:** 3003 3004返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3005 3006 3007### OH_JSVM_EscapeHandle() 3008 3009``` 3010JSVM_EXTERN JSVM_Status OH_JSVM_EscapeHandle (JSVM_Env env, JSVM_EscapableHandleScope scope, JSVM_Value escapee, JSVM_Value * result ) 3011``` 3012 3013**描述** 3014 3015提升JavaScript对象的句柄,使其在外部作用域的生命周期内有效。 每个作用域只能调用一次。如果多次调用,将返回错误。 3016 3017**起始版本:** 11 3018 3019**参数:** 3020 3021| 名称 | 描述 | 3022| -------- | -------- | 3023| env | 调用JSVM-API的环境。 | 3024| scope | 表示当前的作用域。 | 3025| escapee | 表示要提升的JavaScript Object。 | 3026| result | 被提升的Object在外部作用域中的句柄。 | 3027 3028**返回:** 3029 3030返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3031 3032JSVM_ESCAPE_CALLED_TWICE 表示scope对象已被关闭。 3033 3034 3035### OH_JSVM_FreeArrayBufferBackingStoreData() 3036 3037``` 3038JSVM_Status JSVM_CDECL OH_JSVM_FreeArrayBufferBackingStoreData (void * data) 3039``` 3040 3041**描述** 3042 3043释放由 OH_JSVM_AllocateArrayBufferBackingStoreData 申请的 BackingStore 内存。 3044 3045**起始版本:** 12 3046 3047**参数:** 3048 3049| 名称 | 描述 | 3050| -------- | -------- | 3051| data | 申请得到的 BackingStore 内存。 | 3052 3053**返回:** 3054 3055返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3056 3057JSVM_INVALID_ARG 表示传入的 data 是空指针。 3058 3059 3060### OH_JSVM_GetAllPropertyNames() 3061 3062``` 3063JSVM_EXTERN JSVM_Status OH_JSVM_GetAllPropertyNames (JSVM_Env env, JSVM_Value object, JSVM_KeyCollectionMode keyMode, JSVM_KeyFilter keyFilter, JSVM_KeyConversion keyConversion, JSVM_Value * result ) 3064``` 3065 3066**描述** 3067 3068返回一个数组,其中包含此对象的可用属性的名称。 3069 3070**起始版本:** 11 3071 3072**参数:** 3073 3074| 名称 | 描述 | 3075| -------- | -------- | 3076| env | 调用JSVM-API的环境。 | 3077| object | 从中检索属性的对象。 | 3078| keyMode | 是否也检索原型属性。 | 3079| keyFilter | 要检索哪些属性(可枚举/可读/可写)。 | 3080| keyConversion | 表示是否将编号的属性键转换为字符串。 | 3081| result | 表示JavaScript值的数组,这些值表示对象的属性名称。 可以使用OH_JSVM_GetArrayLength和OH_JSVM_GetElement对结果进行迭代。 | 3082 3083**返回:** 3084 3085返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3086 3087JSVM_INVALID_ARG 表示传入的参数不合法。 3088 3089JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 3090 3091 3092### OH_JSVM_GetAndClearLastException() 3093 3094``` 3095JSVM_EXTERN JSVM_Status OH_JSVM_GetAndClearLastException (JSVM_Env env, JSVM_Value * result ) 3096``` 3097 3098**描述** 3099 3100获取并清除上一次异常。如果出现挂起,则返回JavaScript异常,否则返回NULL。 3101 3102**起始版本:** 11 3103 3104**参数:** 3105 3106| 名称 | 描述 | 3107| -------- | -------- | 3108| env | 调用JSVM-API的环境。 | 3109| result | 如果出现挂起则返回异常,否则为NULL。 | 3110 3111**返回:** 3112 3113返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3114 3115 3116### OH_JSVM_GetArraybufferInfo() 3117 3118``` 3119JSVM_EXTERN JSVM_Status OH_JSVM_GetArraybufferInfo (JSVM_Env env, JSVM_Value arraybuffer, void ** data, size_t * byteLength ) 3120``` 3121 3122**描述** 3123 3124用于检索ArrayBuffer的底层数据缓冲区及其长度。 3125 3126**起始版本:** 11 3127 3128**参数:** 3129 3130| 名称 | 描述 | 3131| -------- | -------- | 3132| env | 调用JSVM-API的环境。 | 3133| arraybuffer | 代表被查询的ArrayBuffer。 | 3134| data | ArrayBuffer的底层数据缓冲区。如果byte_length为0,则该值可能为NULL 或任何其他指针值。 | 3135| byteLength | 底层数据缓冲区的字节长度。 | 3136 3137**返回:** 3138 3139返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3140 3141JSVM_INVALID_ARG 表示传入的参数不合法。 3142 3143 3144### OH_JSVM_GetArrayLength() 3145 3146``` 3147JSVM_EXTERN JSVM_Status OH_JSVM_GetArrayLength (JSVM_Env env, JSVM_Value value, uint32_t * result ) 3148``` 3149 3150**描述** 3151 3152返回数组的长度。 3153 3154**起始版本:** 11 3155 3156**参数:** 3157 3158| 名称 | 描述 | 3159| -------- | -------- | 3160| env | 调用JSVM-API的环境。 | 3161| value | 代表查询长度的JavaScript Array。 | 3162| result | uint32代表数组的长度。 | 3163 3164**返回:** 3165 3166返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3167 3168JSVM_ARRAY_EXPECTED 表示传入的参数不是Array类型。 3169 3170 3171### OH_JSVM_GetBoolean() 3172 3173``` 3174JSVM_EXTERN JSVM_Status OH_JSVM_GetBoolean (JSVM_Env env, bool value, JSVM_Value * result ) 3175``` 3176 3177**描述** 3178 3179返回用于表示给定布尔值的JavaScript单例对象。 3180 3181**起始版本:** 11 3182 3183**参数:** 3184 3185| 名称 | 描述 | 3186| -------- | -------- | 3187| env | 调用JSVM-API的环境。 | 3188| value | 要检索的布尔值。 | 3189| result | 表示待检索的JavaScript Boolean单例。 | 3190 3191**返回:** 3192 3193返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3194 3195 3196### OH_JSVM_GetCbInfo() 3197 3198``` 3199JSVM_EXTERN JSVM_Status OH_JSVM_GetCbInfo (JSVM_Env env, JSVM_CallbackInfo cbinfo, size_t * argc, JSVM_Value * argv, JSVM_Value * thisArg, void ** data ) 3200``` 3201 3202**描述** 3203 3204此方法在回调函数中用于检索有关调用的详细信息, 例如来自给定回调信息的参数和this指针。 3205 3206**起始版本:** 11 3207 3208**参数:** 3209 3210| 名称 | 描述 | 3211| -------- | -------- | 3212| env | 调用JSVM-API的环境。 | 3213| cbinfo | 传入回调函数的回调信息。 | 3214| argc | 指定所提供的argv数组的长度并接收参数的实际数量, 可以通过传递NULL来选择性地忽略。 | 3215| argv | JSVM_Value的C数组,用于存储复制的参数。如果参数数量超过提供的数量, 则只复制请求数量的参数。如果提供的参数比声明的少,则argv的其余部分将由代表undefined 的JSVM_Value值填充。可以通过传递NULL来忽略argv。 | 3216| thisArg | 接收调用的JavaScript this参数。thisArg可以通过传递NULL来进行忽略。 | 3217| data | 接收回调的数据指针。data可以通过传递NULL来进行忽略。 | 3218 3219**返回:** 3220 3221返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3222 3223 3224### OH_JSVM_GetDataviewInfo() 3225 3226``` 3227JSVM_EXTERN JSVM_Status OH_JSVM_GetDataviewInfo (JSVM_Env env, JSVM_Value dataview, size_t * bytelength, void ** data, JSVM_Value * arraybuffer, size_t * byteOffset ) 3228``` 3229 3230**描述** 3231 3232返回DataView的各种属性。 如果不需要某一属性,则任何出参都可以设置为NULL。 3233 3234**起始版本:** 11 3235 3236**参数:** 3237 3238| 名称 | 描述 | 3239| -------- | -------- | 3240| env | 调用JSVM-API的环境。 | 3241| dataview | 表示要查询其属性的DataView。 | 3242| bytelength | DataView中的字节个数。 | 3243| data | DataView下的数据缓冲区。如果bytelength是0, 则这可能是NULL或任何其他指针值。 | 3244| arraybuffer | ArrayBuffer是DataView的基础。 | 3245| byteOffset | 开始投影DataView的数据缓冲区中的字节偏移量。 | 3246 3247**返回:** 3248 3249返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3250 3251JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 3252 3253 3254### OH_JSVM_GetDateValue() 3255 3256``` 3257JSVM_EXTERN JSVM_Status OH_JSVM_GetDateValue (JSVM_Env env, JSVM_Value value, double * result ) 3258``` 3259 3260**描述** 3261 3262返回给定JavaScript Date的时间值的C双精度基础类型。如果调用成功,返回JSVM_OK。 如果传入一个非JavaScript Date类型的JSVM_Value,返回JSVM_DATA_EXPECTED。 3263 3264**起始版本:** 11 3265 3266**参数:** 3267 3268| 名称 | 描述 | 3269| -------- | -------- | 3270| env | 调用JSVM-API的环境。 | 3271| value | 代表一个JavaScript Date。 | 3272| result | 作为double的时间值表示为自1970年1月1日UTC午夜以来的毫秒数。 | 3273 3274**返回:** 3275 3276返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3277 3278JSVM_DATE_EXPECTED 表示传入参数不是Date类型。 3279 3280 3281### OH_JSVM_GetElement() 3282 3283``` 3284JSVM_EXTERN JSVM_Status OH_JSVM_GetElement (JSVM_Env env, JSVM_Value object, uint32_t index, JSVM_Value * result ) 3285``` 3286 3287**描述** 3288 3289获取请求索引处的元素。 3290 3291**起始版本:** 11 3292 3293**参数:** 3294 3295| 名称 | 描述 | 3296| -------- | -------- | 3297| env | 调用JSVM-API的环境。 | 3298| object | 待进行属性检索的对象。 | 3299| index | 要获取的属性的索引。 | 3300| result | 属性值。 | 3301 3302**返回:** 3303 3304返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3305 3306JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 3307 3308 3309### OH_JSVM_GetGlobal() 3310 3311``` 3312JSVM_EXTERN JSVM_Status OH_JSVM_GetGlobal (JSVM_Env env, JSVM_Value * result ) 3313``` 3314 3315**描述** 3316 3317返回global对象。 3318 3319**起始版本:** 11 3320 3321**参数:** 3322 3323| 名称 | 描述 | 3324| -------- | -------- | 3325| env | 调用JSVM-API的环境。 | 3326| result | 代表JavaScript global对象。 | 3327 3328**返回:** 3329 3330返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3331 3332 3333### OH_JSVM_GetHeapStatistics() 3334 3335``` 3336JSVM_EXTERN JSVM_Status OH_JSVM_GetHeapStatistics (JSVM_VM vm, JSVM_HeapStatistics * result ) 3337``` 3338 3339**描述** 3340 3341返回一组虚拟机堆的统计数据。 3342 3343**起始版本:** 12 3344 3345**参数:** 3346 3347| 名称 | 描述 | 3348| -------- | -------- | 3349| vm | 返回堆统计信息的虚拟机。 | 3350| result | 堆统计数据。 | 3351 3352**返回:** 3353 3354返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3355 3356 3357### OH_JSVM_GetInstanceData() 3358 3359``` 3360JSVM_EXTERN JSVM_Status OH_JSVM_GetInstanceData (JSVM_Env env, void ** data ) 3361``` 3362 3363**描述** 3364 3365检索通过OH_JSVM_SetInstanceData()与当前运行的JSVM环境相关联的数据。 如果未设置任何关联数据,该函数调用将成功,且data设置为NULL。 3366 3367**起始版本:** 11 3368 3369**参数:** 3370 3371| 名称 | 描述 | 3372| -------- | -------- | 3373| env | 调用JSVM-API的环境。 | 3374| data | 之前通过调用OH_JSVM_SetInstanceData()与当前运行的JSVM环境关联的数据项。 | 3375 3376**返回:** 3377 3378返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3379 3380 3381### OH_JSVM_GetLastErrorInfo() 3382 3383``` 3384JSVM_EXTERN JSVM_Status OH_JSVM_GetLastErrorInfo (JSVM_Env env, const JSVM_ExtendedErrorInfo ** result ) 3385``` 3386 3387**描述** 3388 3389检索JSVM_ExtendedErrorInfo结构,其中包含有关发生的最后一个错误的信息。 返回的JSVM_ExtendedErrorInfo的内容仅在对同一env调用JSVM-API函数之前有效。 这包括对OH_JSVM_IsExceptionPending的调用,因此可能经常需要复制信息以便以后使用。 error_message中返回的指针指向一个静态定义的字符串,因此如果你在调用另一个JSVM-API 函数之前将它从error_message字段(将被覆盖)中复制出来,则可以安全地使用该指针。 3390 3391**起始版本:** 11 3392 3393**参数:** 3394 3395| 名称 | 描述 | 3396| -------- | -------- | 3397| env | 调用JSVM-API的环境。 | 3398| result | 包含有关错误的更多信息的JSVM_ExtendedErrorInfo结构。 | 3399 3400**返回:** 3401 3402返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3403 3404 3405### OH_JSVM_GetNamedProperty() 3406 3407``` 3408JSVM_EXTERN JSVM_Status OH_JSVM_GetNamedProperty (JSVM_Env env, JSVM_Value object, const char * utf8name, JSVM_Value * result ) 3409``` 3410 3411**描述** 3412 3413此方法等效于调用OH_JSVM_GetProperty, 其中,通过utf8Name传入的字符串用于创建JSVM_Value。 3414 3415**起始版本:** 11 3416 3417**参数:** 3418 3419| 名称 | 描述 | 3420| -------- | -------- | 3421| env | 调用JSVM-API的环境。 | 3422| object | 从中检索属性的对象。 | 3423| utf8Name | 要获取的属性名。 | 3424| result | 属性值。 | 3425 3426**返回:** 3427 3428返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3429 3430JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 3431 3432 3433### OH_JSVM_GetNewTarget() 3434 3435``` 3436JSVM_EXTERN JSVM_Status OH_JSVM_GetNewTarget (JSVM_Env env, JSVM_CallbackInfo cbinfo, JSVM_Value * result ) 3437``` 3438 3439**描述** 3440 3441返回构造函数调用的new target。 如果当前回调不是构造函数调用,结果为NULL。 3442 3443**起始版本:** 11 3444 3445**参数:** 3446 3447| 名称 | 描述 | 3448| -------- | -------- | 3449| env | 调用JSVM-API的环境。 | 3450| cbinfo | 传递给回调函数的回调信息。 | 3451| result | 构造函数调用的new target。 | 3452 3453**返回:** 3454 3455返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3456 3457 3458### OH_JSVM_GetNull() 3459 3460``` 3461JSVM_EXTERN JSVM_Status OH_JSVM_GetNull (JSVM_Env env, JSVM_Value * result ) 3462``` 3463 3464**描述** 3465 3466返回null对象。 3467 3468**起始版本:** 11 3469 3470**参数:** 3471 3472| 名称 | 描述 | 3473| -------- | -------- | 3474| env | 调用JSVM-API的环境。 | 3475| result | 代表JavaScript null对象。 | 3476 3477**返回:** 3478 3479返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3480 3481 3482### OH_JSVM_GetProperty() 3483 3484``` 3485JSVM_EXTERN JSVM_Status OH_JSVM_GetProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, JSVM_Value * result ) 3486``` 3487 3488**描述** 3489 3490从传入的object中获取请求的属性。 3491 3492**起始版本:** 11 3493 3494**参数:** 3495 3496| 名称 | 描述 | 3497| -------- | -------- | 3498| env | 调用JSVM-API的环境。 | 3499| object | 从中检索属性的对象。 | 3500| key | 要检索的属性的名称。 | 3501| result | 属性值。 | 3502 3503**返回:** 3504 3505返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3506 3507JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 3508 3509 3510### OH_JSVM_GetPropertyNames() 3511 3512``` 3513JSVM_EXTERN JSVM_Status OH_JSVM_GetPropertyNames (JSVM_Env env, JSVM_Value object, JSVM_Value * result ) 3514``` 3515 3516**描述** 3517 3518以字符数数组的形式返回object的可枚举属性的名称。 key为符号的object的属性将不会被包含在内。 3519 3520**起始版本:** 11 3521 3522**参数:** 3523 3524| 名称 | 描述 | 3525| -------- | -------- | 3526| env | 调用JSVM-API的环境。 | 3527| object | 待进行属性检索的对象。 | 3528| result | 表示一个JavaScript值的数组,这些值表示对象的属性名称。 可以使用OH_JSVM_GetArrayLength以及OH_JSVM_GetElement对结果进行迭代。 | 3529 3530**返回:** 3531 3532返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3533 3534 3535### OH_JSVM_GetPrototype() 3536 3537``` 3538JSVM_EXTERN JSVM_Status OH_JSVM_GetPrototype (JSVM_Env env, JSVM_Value object, JSVM_Value * result ) 3539``` 3540 3541**描述** 3542 3543返回对象的原型。 3544 3545**起始版本:** 11 3546 3547**参数:** 3548 3549| 名称 | 描述 | 3550| -------- | -------- | 3551| env | 调用JSVM-API的环境。 | 3552| object | 表示待返回其原型的JavaScript object。 这将返回Object.getPrototypeOf的等价值(与函数的prototype属性不同)。 | 3553| result | 表示给定对象的原型。 | 3554 3555**返回:** 3556 3557返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3558 3559 3560### OH_JSVM_GetReferenceValue() 3561 3562``` 3563JSVM_EXTERN JSVM_Status OH_JSVM_GetReferenceValue (JSVM_Env env, JSVM_Ref ref, JSVM_Value * result ) 3564``` 3565 3566**描述** 3567 3568如果仍然有效,此JSVM-API将返回JSVM_Value, 表示与JSVM_Ref关联的JavaScript值。否则,结果将为NULL。 3569 3570**起始版本:** 11 3571 3572**参数:** 3573 3574| 名称 | 描述 | 3575| -------- | -------- | 3576| env | 调用JSVM-API的环境。 | 3577| ref | 请求相应值的JSVM_Ref。 | 3578| result | JSVM_Ref引用的JSVM_Value。 | 3579 3580**返回:** 3581 3582返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3583 3584 3585### OH_JSVM_GetTypedarrayInfo() 3586 3587``` 3588JSVM_EXTERN JSVM_Status OH_JSVM_GetTypedarrayInfo (JSVM_Env env, JSVM_Value typedarray, JSVM_TypedarrayType * type, size_t * length, void ** data, JSVM_Value * arraybuffer, size_t * byteOffset ) 3589``` 3590 3591**描述** 3592 3593返回类型化数组的各种属性。如果不需要该属性,则任何输出参数都可以是 NULL。 3594 3595**起始版本:** 11 3596 3597**参数:** 3598 3599| 名称 | 描述 | 3600| -------- | -------- | 3601| env | 调用JSVM-API的环境。 | 3602| typedarray | 表示要查询其属性的TypedArray。 | 3603| type | TypedArray中元素的标量数据类型。 | 3604| length | TypedArray中的元素数。 | 3605| data | TypedArray底层的数据缓冲区由byte_offset值调整,使其指向TypedArray 中的第一个元素。如果数组的长度是0,这可能是NULL或任何其他指针值。 | 3606| arraybuffer | 位于TypedArray下的ArrayBuffer。 | 3607| byteOffset | 数组的第一个元素所在的基础原生数组中的字节偏移量。 data 参数的值已经过调整,因此data指向数组中的第一个元素。因此, 原生数组的第一个字节将位于data - byte_offset。 | 3608 3609**返回:** 3610 3611返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3612 3613JSVM_INVALID_ARG 表示传入的参数不合法。 3614 3615 3616### OH_JSVM_GetUndefined() 3617 3618``` 3619JSVM_EXTERN JSVM_Status OH_JSVM_GetUndefined (JSVM_Env env, JSVM_Value * result ) 3620``` 3621 3622**描述** 3623 3624返回Undefined对象。 3625 3626**起始版本:** 11 3627 3628**参数:** 3629 3630| 名称 | 描述 | 3631| -------- | -------- | 3632| env | 调用JSVM-API的环境。 | 3633| value | 代表JavaScript undefined值。 | 3634 3635**返回:** 3636 3637返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3638 3639 3640### OH_JSVM_GetValueBigintInt64() 3641 3642``` 3643JSVM_EXTERN JSVM_Status OH_JSVM_GetValueBigintInt64 (JSVM_Env env, JSVM_Value value, int64_t * result, bool * lossless ) 3644``` 3645 3646**描述** 3647 3648返回给定JavaScript BigInt的C int64_t基础类型等价值。 如果需要,它将截断该值,将lossless设置为false。 3649 3650**起始版本:** 11 3651 3652**参数:** 3653 3654| 名称 | 描述 | 3655| -------- | -------- | 3656| env | 调用JSVM-API的环境。 | 3657| value | 代表JavaScript BigInt。 | 3658| result | 给定的JavaScript BigInt的C int64_t基础类型等价值。 | 3659| lossless | 指示BigInt值是否已无损转换。 | 3660 3661**返回:** 3662 3663返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3664 3665JSVM_BIGINT_EXPECTED 表示传入的参数不是BitInt类型。 3666 3667 3668### OH_JSVM_GetValueBigintUint64() 3669 3670``` 3671JSVM_EXTERN JSVM_Status OH_JSVM_GetValueBigintUint64 (JSVM_Env env, JSVM_Value value, uint64_t * result, bool * lossless ) 3672``` 3673 3674**描述** 3675 3676返回给定JavaScript BigInt的C uint64_t基础类型等价值。 如果需要,它将截断该值,将lossless设置为false。 3677 3678**起始版本:** 11 3679 3680**参数:** 3681 3682| 名称 | 描述 | 3683| -------- | -------- | 3684| env | 调用JSVM-API的环境。 | 3685| value | 代表JavaScript BigInt。 | 3686| result | 给定的JavaScript BigInt的C uint64_t基础类型等价值。 | 3687| lossless | 指示BigInt值是否已无损转换。 | 3688 3689**返回:** 3690 3691返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3692 3693JSVM_BIGINT_EXPECTED 表示传入的参数不是BitInt类型。 3694 3695 3696### OH_JSVM_GetValueBigintWords() 3697 3698``` 3699JSVM_EXTERN JSVM_Status OH_JSVM_GetValueBigintWords (JSVM_Env env, JSVM_Value value, int * signBit, size_t * wordCount, uint64_t * words ) 3700``` 3701 3702**描述** 3703 3704将单个BigInt值转换为符号位、64位小端数组和数组中的元素数。 signBit和words参数可以都设置为NULL。这种情况下,只获取wordCount。 3705 3706**起始版本:** 11 3707 3708**参数:** 3709 3710| 名称 | 描述 | 3711| -------- | -------- | 3712| env | 调用JSVM-API的环境。 | 3713| value | 代表JavaScript BigInt。 | 3714| signBit | 表示JavaScript BigInt是正数还是负数的整数。 | 3715| wordCount | 必须初始化为words数组的长度。返回后,将被设置为存储此BigInt所需的实际字数。 | 3716| words | 指向预分配的64位字数组的指针。 | 3717 3718**返回:** 3719 3720返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3721 3722JSVM_BIGINT_EXPECTED 表示传入的参数不是BitInt类型。 3723 3724 3725### OH_JSVM_GetValueBool() 3726 3727``` 3728JSVM_EXTERN JSVM_Status OH_JSVM_GetValueBool (JSVM_Env env, JSVM_Value value, bool * result ) 3729``` 3730 3731**描述** 3732 3733返回给定JavaScript Boolean的C布尔基础类型等价值。 3734 3735**起始版本:** 11 3736 3737**参数:** 3738 3739| 名称 | 描述 | 3740| -------- | -------- | 3741| env | 调用JSVM-API的环境。 | 3742| value | 代表JavaScript Boolean。 | 3743| result | 给定JavaScript Boolean的C布尔基础类型等价值。 | 3744 3745**返回:** 3746 3747返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3748 3749JSVM_BOOLEAN_EXPECTED 表示传入的参数不是boolean类型。 3750 3751 3752### OH_JSVM_GetValueDouble() 3753 3754``` 3755JSVM_EXTERN JSVM_Status OH_JSVM_GetValueDouble (JSVM_Env env, JSVM_Value value, double * result ) 3756``` 3757 3758**描述** 3759 3760返回给定JavaScript number的C双精度基础类型等价值。 3761 3762**起始版本:** 11 3763 3764**参数:** 3765 3766| 名称 | 描述 | 3767| -------- | -------- | 3768| env | 调用JSVM-API的环境。 | 3769| value | 代表JavaScript number。 | 3770| result | 给定的JavaScript number的C双精度基础类型等价值。 | 3771 3772**返回:** 3773 3774返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3775 3776JSVM_NUMBER_EXPECTED 表示传入的参数不是number类型。 3777 3778 3779### OH_JSVM_GetValueExternal() 3780 3781``` 3782JSVM_EXTERN JSVM_Status OH_JSVM_GetValueExternal (JSVM_Env env, JSVM_Value value, void ** result ) 3783``` 3784 3785**描述** 3786 3787检索之前传递给OH_JSVM_CreateExternal()的外部数据指针。 3788 3789**起始版本:** 11 3790 3791**参数:** 3792 3793| 名称 | 描述 | 3794| -------- | -------- | 3795| env | 调用JSVM-API的环境。 | 3796| value | 代表JavaScript外部值。 | 3797| result | 指向被JavaScript外部值封装的数据的指针。 | 3798 3799**返回:** 3800 3801返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3802 3803JSVM_INVALID_ARG 表示传入参数非外部的JSVM_Value。 3804 3805 3806### OH_JSVM_GetValueInt32() 3807 3808``` 3809JSVM_EXTERN JSVM_Status OH_JSVM_GetValueInt32 (JSVM_Env env, JSVM_Value value, int32_t * result ) 3810``` 3811 3812**描述** 3813 3814返回给定JavaScript number的C int32基础类型等价值。 3815 3816**起始版本:** 11 3817 3818**参数:** 3819 3820| 名称 | 描述 | 3821| -------- | -------- | 3822| env | 调用JSVM-API的环境。 | 3823| value | 代表JavaScript number。 | 3824| result | 给定的JavaScript number的C int32基础类型等价值。 | 3825 3826**返回:** 3827 3828返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3829 3830JSVM_NUMBER_EXPECTED 表示传入的参数不是number类型。 3831 3832 3833### OH_JSVM_GetValueInt64() 3834 3835``` 3836JSVM_EXTERN JSVM_Status OH_JSVM_GetValueInt64 (JSVM_Env env, JSVM_Value value, int64_t * result ) 3837``` 3838 3839**描述** 3840 3841返回给定JavaScript number的C int64基础类型等价值。 3842 3843**起始版本:** 11 3844 3845**参数:** 3846 3847| 名称 | 描述 | 3848| -------- | -------- | 3849| env | 调用JSVM-API的环境。 | 3850| value | 代表JavaScript number。 | 3851| result | 给定的JavaScript number的C int64基础类型等价值。 | 3852 3853**返回:** 3854 3855返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3856 3857JSVM_NUMBER_EXPECTED 表示传入的参数不是number类型。 3858 3859 3860### OH_JSVM_GetValueStringLatin1() 3861 3862``` 3863JSVM_EXTERN JSVM_Status OH_JSVM_GetValueStringLatin1 (JSVM_Env env, JSVM_Value value, char * buf, size_t bufsize, size_t * result ) 3864``` 3865 3866**描述** 3867 3868返回对应于传入值的ISO-8859-1编码字符串 3869 3870**起始版本:** 11 3871 3872**参数:** 3873 3874| 名称 | 描述 | 3875| -------- | -------- | 3876| env | 调用JSVM-API的环境。 | 3877| value | 代表JavaScript number。 | 3878| buf | 写入ISO-8859-1编码字符串的缓冲区。如果传入NULL,则将在result中返回 字符串的长度(以字节为单位,不包括null结束符)。 | 3879| bufsize | 目的缓冲区大小。当大小不够时,返回的字符串将被截断并以null结尾。 | 3880| result | 复制到缓冲区中的字节数,不包括空终止符。 | 3881 3882**返回:** 3883 3884返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3885 3886JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 3887 3888 3889### OH_JSVM_GetValueStringUtf16() 3890 3891``` 3892JSVM_EXTERN JSVM_Status OH_JSVM_GetValueStringUtf16 (JSVM_Env env, JSVM_Value value, char16_t * buf, size_t bufsize, size_t * result ) 3893``` 3894 3895**描述** 3896 3897基于传入的值,查询对应的采用UTF16编码的字符串。 3898 3899**起始版本:** 11 3900 3901**参数:** 3902 3903| 名称 | 描述 | 3904| -------- | -------- | 3905| env | 调用JSVM-API的环境。 | 3906| value | 代表JavaScript字符串。 | 3907| buf | 将UTF16-LE编码字符串写入的缓冲区。如果传入NULL,则返回字符串的 2字节代码单元长度,不包括空终止符。 | 3908| bufsize | 目标缓冲区的大小。当此值不足时,返回的字符串将被截断并以null终止。 | 3909| result | 复制到缓冲区中的2字节代码单元数,不包括空终止符。 | 3910 3911**返回:** 3912 3913返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3914 3915JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 3916 3917 3918### OH_JSVM_GetValueStringUtf8() 3919 3920``` 3921JSVM_EXTERN JSVM_Status OH_JSVM_GetValueStringUtf8 (JSVM_Env env, JSVM_Value value, char * buf, size_t bufsize, size_t * result ) 3922``` 3923 3924**描述** 3925 3926返回对应于传入值的UTF8编码字符串。 3927 3928**起始版本:** 11 3929 3930**参数:** 3931 3932| 名称 | 描述 | 3933| -------- | -------- | 3934| env | 调用JSVM-API的环境。 | 3935| value | 代表JavaScript字符串。 | 3936| buf | 将UTF8编码的字符串写入的缓冲区。如果传入NULL,则在result中 返回以字节为单位的字符串长度,不包括空终止符。 | 3937| bufsize | 目标缓冲区的大小。当此值不足时,返回的字符串将被截断并以null终止。 | 3938| result | 复制到缓冲区的字节数,不包括null结束符。 | 3939 3940**返回:** 3941 3942返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3943 3944JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 3945 3946 3947### OH_JSVM_GetValueUint32() 3948 3949``` 3950JSVM_EXTERN JSVM_Status OH_JSVM_GetValueUint32 (JSVM_Env env, JSVM_Value value, uint32_t * result ) 3951``` 3952 3953**描述** 3954 3955返回给定JavaScript number的C uint_32基础类型等价值。 3956 3957**起始版本:** 11 3958 3959**参数:** 3960 3961| 名称 | 描述 | 3962| -------- | -------- | 3963| env | 调用JSVM-API的环境。 | 3964| value | 代表JavaScript number。 | 3965| result | 将给定的JSVM_Value等效为uint32_t 的C基础类型。 | 3966 3967**返回:** 3968 3969返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3970 3971JSVM_NUMBER_EXPECTED 表示传入的参数不是number类型。 3972 3973 3974### OH_JSVM_GetVersion() 3975 3976``` 3977JSVM_EXTERN JSVM_Status OH_JSVM_GetVersion (JSVM_Env env, uint32_t * result ) 3978``` 3979 3980**描述** 3981 3982返回JSVM运行时支持的最高JSVM-API版本。 后续将新增JSVM-API,以便支持更多的功能。引入该API的目的:在支持某功能的JSVM版本, 可以使用新的功能;在不支持某功能的JSVM版本,可以提供回调行为。 3983 3984**起始版本:** 11 3985 3986**参数:** 3987 3988| 名称 | 描述 | 3989| -------- | -------- | 3990| env | 调用JSVM-API的环境。 | 3991| result | 支持的最高版本的JSVM-API。 | 3992 3993**返回:** 3994 3995返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 3996 3997 3998### OH_JSVM_GetVM() 3999 4000``` 4001JSVM_EXTERN JSVM_Status OH_JSVM_GetVM (JSVM_Env env, JSVM_VM * result ) 4002``` 4003 4004**描述** 4005 4006将检索给定环境的虚拟机实例。 4007 4008**起始版本:** 12 4009 4010**参数:** 4011 4012| 名称 | 描述 | 4013| -------- | -------- | 4014| env | 目标环境,JSVM-API接口将在该环境下调用。 | 4015| result | 给定环境的虚拟机实例。 | 4016 4017**返回:** 4018 4019返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4020 4021 4022### OH_JSVM_GetVMInfo() 4023 4024``` 4025JSVM_EXTERN JSVM_Status OH_JSVM_GetVMInfo (JSVM_VMInfo * result) 4026``` 4027 4028**描述** 4029 4030返回虚拟机的信息。 4031 4032**起始版本:** 11 4033 4034**参数:** 4035 4036| 名称 | 描述 | 4037| -------- | -------- | 4038| result | 虚拟机的信息。 | 4039 4040**返回:** 4041 4042返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4043 4044 4045### OH_JSVM_HasElement() 4046 4047``` 4048JSVM_EXTERN JSVM_Status OH_JSVM_HasElement (JSVM_Env env, JSVM_Value object, uint32_t index, bool * result ) 4049``` 4050 4051**描述** 4052 4053如果传入的Object在指定的索引处有一个元素,则此JSVM-API返回true。 4054 4055**起始版本:** 11 4056 4057**参数:** 4058 4059| 名称 | 描述 | 4060| -------- | -------- | 4061| env | 调用JSVM-API的环境。 | 4062| object | 待查询的对象。 | 4063| index | 待确定是否存在元素的索引位置。 | 4064| result | 该属性是否存在于对象上。 | 4065 4066**返回:** 4067 4068返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4069 4070JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4071 4072 4073### OH_JSVM_HasNamedProperty() 4074 4075``` 4076JSVM_EXTERN JSVM_Status OH_JSVM_HasNamedProperty (JSVM_Env env, JSVM_Value object, const char * utf8name, bool * result ) 4077``` 4078 4079**描述** 4080 4081此方法等效于使用从作为utf8Name传入的字符串创建的JSVM_Value 调用OH_JSVM_HasProperty。 4082 4083**起始版本:** 11 4084 4085**参数:** 4086 4087| 名称 | 描述 | 4088| -------- | -------- | 4089| env | 调用JSVM-API的环境。 | 4090| object | 待查询的对象。 | 4091| utf8Name | 待检查的属性名。 | 4092| result | 该属性是否存在于对象上。 | 4093 4094**返回:** 4095 4096返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4097 4098JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4099 4100 4101### OH_JSVM_HasOwnProperty() 4102 4103``` 4104JSVM_EXTERN JSVM_Status OH_JSVM_HasOwnProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, bool * result ) 4105``` 4106 4107**描述** 4108 4109检查传入的Object是否具有命名的自己的属性。key必须是string或symbol, 否则将抛出错误。JSVM-API不会执行任何数据类型之间的转换。 4110 4111**起始版本:** 11 4112 4113**参数:** 4114 4115| 名称 | 描述 | 4116| -------- | -------- | 4117| env | 调用JSVM-API的环境。 | 4118| object | 待查询的对象。 | 4119| key | 要检查其存在的自有属性的名称。 | 4120| result | 表示对象上是否存在该自身属性。 | 4121 4122**返回:** 4123 4124返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4125 4126JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4127 4128 4129### OH_JSVM_HasProperty() 4130 4131``` 4132JSVM_EXTERN JSVM_Status OH_JSVM_HasProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, bool * result ) 4133``` 4134 4135**描述** 4136 4137检查传入的Object是否具有指定命名的属性。 4138 4139**起始版本:** 11 4140 4141**参数:** 4142 4143| 名称 | 描述 | 4144| -------- | -------- | 4145| env | 调用JSVM-API的环境。 | 4146| object | 待查询的对象。 | 4147| key | 要检查其存在的属性的名称。 | 4148| result | 该属性是否存在于对象上。 | 4149 4150**返回:** 4151 4152返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4153 4154JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4155 4156 4157### OH_JSVM_Init() 4158 4159``` 4160EXTERN_C_START JSVM_EXTERN JSVM_Status OH_JSVM_Init (const JSVM_InitOptions * options) 4161``` 4162 4163**描述** 4164 4165初始化一个JavaScript虚拟机。 4166 4167**起始版本:** 11 4168 4169**参数:** 4170 4171| 名称 | 描述 | 4172| -------- | -------- | 4173| options | 用于初始化JavaScript虚拟机的选项。 | 4174 4175**返回:** 4176 4177返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4178 4179 4180### OH_JSVM_Instanceof() 4181 4182``` 4183JSVM_EXTERN JSVM_Status OH_JSVM_Instanceof (JSVM_Env env, JSVM_Value object, JSVM_Value constructor, bool * result ) 4184``` 4185 4186**描述** 4187 4188提供类似于在对象上调用instanceof运算符的行为。 4189 4190**起始版本:** 11 4191 4192**参数:** 4193 4194| 名称 | 描述 | 4195| -------- | -------- | 4196| env | 调用JSVM-API的环境。 | 4197| value | 要检查的JavaScript值。 | 4198| constructor | 要检查的构造函数的JavaScript函数对象 | 4199| result | 如果object instanceof constructor为true,则设置为true的布尔值。 | 4200 4201**返回:** 4202 4203返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4204 4205JSVM_FUNCTION_EXPECTED 表示传入的参数不是Function类型。 4206 4207JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4208 4209 4210### OH_JSVM_IsArray() 4211 4212``` 4213JSVM_EXTERN JSVM_Status OH_JSVM_IsArray (JSVM_Env env, JSVM_Value value, bool * result ) 4214``` 4215 4216**描述** 4217 4218提供类似于在对象上调用IsArray的行为。 4219 4220**起始版本:** 11 4221 4222**参数:** 4223 4224| 名称 | 描述 | 4225| -------- | -------- | 4226| env | 调用JSVM-API的环境。 | 4227| value | 待检查的JavaScript值。 | 4228| result | 表示给定的对象是否为数组。 | 4229 4230**返回:** 4231 4232返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4233 4234 4235### OH_JSVM_IsArraybuffer() 4236 4237``` 4238JSVM_EXTERN JSVM_Status OH_JSVM_IsArraybuffer (JSVM_Env env, JSVM_Value value, bool * result ) 4239``` 4240 4241**描述** 4242 4243检查传入的对象是否为ArrayBuffer。 4244 4245**起始版本:** 11 4246 4247**参数:** 4248 4249| 名称 | 描述 | 4250| -------- | -------- | 4251| env | 调用JSVM-API的环境。 | 4252| value | 待检查的JavaScript值。 | 4253| result | 表示指定的对象是否为ArrayBuffer。 | 4254 4255**返回:** 4256 4257返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4258 4259 4260### OH_JSVM_IsBigInt() 4261 4262``` 4263JSVM_EXTERN JSVM_Status OH_JSVM_IsBigInt (JSVM_Env env, JSVM_Value value, bool * isBigInt ) 4264``` 4265 4266**描述** 4267 4268此API检查传入的值是否为BigInt。 这相当于JS中的‘typeof value === 'bigint’`。 4269 4270**起始版本:** 12 4271 4272**参数:** 4273 4274| 名称 | 描述 | 4275| -------- | -------- | 4276| env | 调用JSVM-API的环境。 | 4277| value | 待检查的JSVM_Value。 | 4278| isBigInt | 表示给定的JSVM_Value是否为BigInt。 | 4279 4280**返回:** 4281 4282返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4283 4284 4285### OH_JSVM_IsBoolean() 4286 4287``` 4288JSVM_EXTERN JSVM_Status OH_JSVM_IsBoolean (JSVM_Env env, JSVM_Value value, bool * isBoolean ) 4289``` 4290 4291**描述** 4292 4293此API检查传入的值是否为Boolean。 这相当于JS中的‘typeof value === 'boolean’`。 4294 4295**起始版本:** 12 4296 4297**参数:** 4298 4299| 名称 | 描述 | 4300| -------- | -------- | 4301| env | 调用JSVM-API的环境。 | 4302| value | 待检查的JSVM_Value。 | 4303| isBoolean | 表示给定的JSVM_Value是否为Boolean。 | 4304 4305**返回:** 4306 4307返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4308 4309 4310### OH_JSVM_IsConstructor() 4311 4312``` 4313JSVM_Status JSVM_CDECL OH_JSVM_IsConstructor (JSVM_Env env, JSVM_Value value, bool * isConstructor ) 4314``` 4315 4316**描述** 4317 4318此API检查传入的值是否为构造函数。 4319 4320**起始版本:** 12 4321 4322**参数:** 4323 4324| 名称 | 描述 | 4325| -------- | -------- | 4326| env | 调用JSVM-API的环境。 | 4327| value | 待检查的JSVM_Value。 | 4328| isConstructor | 给定的值是否为构造函数。 | 4329 4330**返回:** 4331 4332返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4333 4334JSVM_INVALID_ARG 表示输入参数不合法。 4335 4336 4337### OH_JSVM_IsDataview() 4338 4339``` 4340JSVM_EXTERN JSVM_Status OH_JSVM_IsDataview (JSVM_Env env, JSVM_Value value, bool * result ) 4341``` 4342 4343**描述** 4344 4345检查传入的对象是否是DataView。 4346 4347**起始版本:** 11 4348 4349**参数:** 4350 4351| 名称 | 描述 | 4352| -------- | -------- | 4353| env | 调用JSVM-API的环境。 | 4354| value | 待检查的JavaScript值。 | 4355| result | 给定的JSVM_Value是否代表DataView。 | 4356 4357**返回:** 4358 4359返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4360 4361 4362### OH_JSVM_IsDate() 4363 4364``` 4365JSVM_EXTERN JSVM_Status OH_JSVM_IsDate (JSVM_Env env, JSVM_Value value, bool * isDate ) 4366``` 4367 4368**描述** 4369 4370检查传入的Object是否为日期。 4371 4372**起始版本:** 11 4373 4374**参数:** 4375 4376| 名称 | 描述 | 4377| -------- | -------- | 4378| env | 调用JSVM-API的环境。 | 4379| value | 待检查的JavaScript值。 | 4380| isDate | 给定的JSVM_Value是否表示JavaScript Date对象。 | 4381 4382**返回:** 4383 4384返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4385 4386 4387### OH_JSVM_IsDetachedArraybuffer() 4388 4389``` 4390JSVM_EXTERN JSVM_Status OH_JSVM_IsDetachedArraybuffer (JSVM_Env env, JSVM_Value value, bool * result ) 4391``` 4392 4393**描述** 4394 4395提供类似调用ArrayBuffer IsDetachedBuffer操作的行为。 4396 4397**起始版本:** 11 4398 4399**参数:** 4400 4401| 名称 | 描述 | 4402| -------- | -------- | 4403| env | 调用JSVM-API的环境。 | 4404| value | 待检查的JavaScript ArrayBuffer。 | 4405| result | 表示ArrayBuffer是否被分离。 | 4406 4407**返回:** 4408 4409返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4410 4411 4412### OH_JSVM_IsError() 4413 4414``` 4415JSVM_EXTERN JSVM_Status OH_JSVM_IsError (JSVM_Env env, JSVM_Value value, bool * result ) 4416``` 4417 4418**描述** 4419 4420查询JSVM_Value以检查它是否表示错误对象。 4421 4422**起始版本:** 11 4423 4424**参数:** 4425 4426| 名称 | 描述 | 4427| -------- | -------- | 4428| env | 调用JSVM-API的环境。 | 4429| value | 待检查的JSVM_Value。 | 4430| result | 如果JSVM_Value表示错误,则设置为true的布尔值,否则设置为false。 | 4431 4432**返回:** 4433 4434返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4435 4436 4437### OH_JSVM_IsExceptionPending() 4438 4439``` 4440JSVM_EXTERN JSVM_Status OH_JSVM_IsExceptionPending (JSVM_Env env, bool * result ) 4441``` 4442 4443**描述** 4444 4445查询上一次异常是否由挂起导致的。如果由异常导致,则返回true,否则返回false。 4446 4447**起始版本:** 11 4448 4449**参数:** 4450 4451| 名称 | 描述 | 4452| -------- | -------- | 4453| env | 调用JSVM-API的环境。 | 4454| result | 如果异常挂起,则设置为true的布尔值。 | 4455 4456**返回:** 4457 4458返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4459 4460 4461### OH_JSVM_IsFunction() 4462 4463``` 4464JSVM_EXTERN JSVM_Status OH_JSVM_IsFunction (JSVM_Env env, JSVM_Value value, bool * isFunction ) 4465``` 4466 4467**描述** 4468 4469此API检查传入的值是否为Function。 这相当于JS中的‘typeof value === 'function’`。 4470 4471**起始版本:** 12 4472 4473**参数:** 4474 4475| 名称 | 描述 | 4476| -------- | -------- | 4477| env | 调用JSVM-API的环境。 | 4478| value | 待检查的JSVM_Value。 | 4479| isFunction | 表示给定的JSVM_Value是否为Function。 | 4480 4481**返回:** 4482 4483返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4484 4485 4486### OH_JSVM_IsMap() 4487 4488``` 4489JSVM_Status JSVM_CDECL OH_JSVM_IsMap (JSVM_Env env, JSVM_Value value, bool * isMap ) 4490``` 4491 4492**描述** 4493 4494此API检查传入的值是否为Map。 4495 4496**起始版本:** 12 4497 4498**参数:** 4499 4500| 名称 | 描述 | 4501| -------- | -------- | 4502| env | 调用JSVM-API的环境。 | 4503| value | 待检查的JSVM_Value。 | 4504| isMap | 给定的值是否为Map。 | 4505 4506**返回:** 4507 4508返回执行状态码JSVM_Status。 JSVM_OK 表示执行成功。 4509 4510JSVM_INVALID_ARG 表示输入参数不合法。 4511 4512 4513### OH_JSVM_IsNull() 4514 4515``` 4516JSVM_EXTERN JSVM_Status OH_JSVM_IsNull (JSVM_Env env, JSVM_Value value, bool * isNull ) 4517``` 4518 4519**描述** 4520 4521此API检查传入的值是否为Null对象。 这相当于JS中的value === null。 4522 4523**起始版本:** 12 4524 4525**参数:** 4526 4527| 名称 | 描述 | 4528| -------- | -------- | 4529| env | 调用JSVM-API的环境。 | 4530| value | 待检查的JSVM_Value。 | 4531| isNull | 表示给定的JSVM_Value是否为Null。 | 4532 4533**返回:** 4534 4535返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4536 4537 4538### OH_JSVM_IsNullOrUndefined() 4539 4540``` 4541JSVM_EXTERN JSVM_Status OH_JSVM_IsNullOrUndefined (JSVM_Env env, JSVM_Value value, bool * isNullOrUndefined ) 4542``` 4543 4544**描述** 4545 4546此API检查传入的值是否为Null或Undefined。 这相当于JS中的value == null。 4547 4548**起始版本:** 12 4549 4550**参数:** 4551 4552| 名称 | 描述 | 4553| -------- | -------- | 4554| env | 调用JSVM-API的环境。 | 4555| value | 待检查的JSVM_Value。 | 4556| isNullOrUndefined | 表示给定的JSVM_Value是否为Null或Undefined。 | 4557 4558**返回:** 4559 4560返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4561 4562 4563### OH_JSVM_IsNumber() 4564 4565``` 4566JSVM_EXTERN JSVM_Status OH_JSVM_IsNumber (JSVM_Env env, JSVM_Value value, bool * isNumber ) 4567``` 4568 4569**描述** 4570 4571此API检查传入的值是否为Number。 这相当于JS中的‘typeof value === 'number’`。 4572 4573**起始版本:** 12 4574 4575**参数:** 4576 4577| 名称 | 描述 | 4578| -------- | -------- | 4579| env | 调用JSVM-API的环境。 | 4580| value | 待检查的JSVM_Value。 | 4581| isNumber | 表示给定的JSVM_Value是否为Number。 | 4582 4583**返回:** 4584 4585返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4586 4587 4588### OH_JSVM_IsObject() 4589 4590``` 4591JSVM_EXTERN JSVM_Status OH_JSVM_IsObject (JSVM_Env env, JSVM_Value value, bool * isObject ) 4592``` 4593 4594**描述** 4595 4596此API检查传入的值是否为Object。 4597 4598**起始版本:** 12 4599 4600**参数:** 4601 4602| 名称 | 描述 | 4603| -------- | -------- | 4604| env | 调用JSVM-API的环境。 | 4605| value | 待检查的JSVM_Value。 | 4606| isObject | 表示给定的JSVM_Value是否为Object。 | 4607 4608**返回:** 4609 4610返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4611 4612 4613### OH_JSVM_IsPromise() 4614 4615``` 4616JSVM_EXTERN JSVM_Status OH_JSVM_IsPromise (JSVM_Env env, JSVM_Value value, bool * isPromise ) 4617``` 4618 4619**描述** 4620 4621查询Promise是否为原生Promise对象。 4622 4623**起始版本:** 11 4624 4625**参数:** 4626 4627| 名称 | 描述 | 4628| -------- | -------- | 4629| env | 调用JSVM-API的环境。 | 4630| value | 待检查的值。 | 4631| isPromise | 表示是否为原生Promise对象(即底层引擎创建的promise对象)的标志。 | 4632 4633**返回:** 4634 4635返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4636 4637 4638### OH_JSVM_PromiseRegisterHandler() 4639 4640``` 4641JSVM_EXTERN JSVM_Status OH_JSVM_PromiseRegisterHandler (JSVM_Env env, JSVM_Value promise, JSVM_Value onFulfilled, JSVM_Value onRejected, JSVM_Value *result) 4642``` 4643 4644**描述** 4645 4646注册处理 Promise 兑现/拒绝的回调函数。 4647 4648**起始版本:** 18 4649 4650**参数:** 4651 4652| 名称 | 描述 | 4653| -------- | -------- | 4654| env | 调用JSVM-API的环境。 | 4655| promise | 需要注册回调的 promise。 | 4656| onFulfilled | 该函数在 promise 兑现后调用。 | 4657| onRejected | 该函数在 promise 拒绝后调用。 | 4658| result | 输出参数,返回 promise 调用 then/catch 接口后生成的新的 promise。 | 4659 4660**返回:** 4661 4662返回执行状态码 JSVM_Status。<br/> 4663JSVM_OK 表示执行成功。<br/> 4664JSVM_STRING_EXPECTED 表示传入的参数不是string类型。<br/> 4665JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4666 4667 4668### OH_JSVM_IsRegExp() 4669 4670``` 4671JSVM_EXTERN JSVM_Status OH_JSVM_IsRegExp (JSVM_Env env, JSVM_Value value, bool * result ) 4672``` 4673 4674**描述** 4675 4676此API检查传入的值是否为JavaScript RegExp对象。 4677 4678**起始版本:** 12 4679 4680**参数:** 4681 4682| 名称 | 描述 | 4683| -------- | -------- | 4684| env | 调用JSVM-API的环境。 | 4685| value | 待检查的JSVM_Value。 | 4686| result | 表示给定的JSVM_Value是否为JavaScript RegExp对象。 | 4687 4688**返回:** 4689 4690返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4691 4692 4693### OH_JSVM_IsSet() 4694 4695``` 4696JSVM_EXTERN JSVM_Status OH_JSVM_IsSet (JSVM_Env env, JSVM_Value value, bool * isSet ) 4697``` 4698 4699**描述** 4700 4701判断给定的对象是否是Set类型。 4702 4703**起始版本:** 12 4704 4705**参数:** 4706 4707| 名称 | 描述 | 4708| -------- | -------- | 4709| env | 调用JSVM-API的环境。 | 4710| value | 待检查的对象。 | 4711| isSet | 给定的对象是否是Set类型。 | 4712 4713**返回:** 4714 4715返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 4716 4717JSVM_INVALID_ARG 表示输入参数不合法。 4718 4719 4720### OH_JSVM_IsString() 4721 4722``` 4723JSVM_EXTERN JSVM_Status OH_JSVM_IsString (JSVM_Env env, JSVM_Value value, bool * isString ) 4724``` 4725 4726**描述** 4727 4728此API检查传入的值是否为String。 这相当于JS中的‘typeof value === 'string’`。 4729 4730**起始版本:** 12 4731 4732**参数:** 4733 4734| 名称 | 描述 | 4735| -------- | -------- | 4736| env | 调用JSVM-API的环境。 | 4737| value | 待检查的JSVM_Value。 | 4738| isString | 表示给定的JSVM_Value是否为String。 | 4739 4740**返回:** 4741 4742返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4743 4744 4745### OH_JSVM_IsSymbol() 4746 4747``` 4748JSVM_EXTERN JSVM_Status OH_JSVM_IsSymbol (JSVM_Env env, JSVM_Value value, bool * isSymbol ) 4749``` 4750 4751**描述** 4752 4753此API检查传入的值是否为Symbol。 这相当于JS中的‘typeof value === 'symbol’`。 4754 4755**起始版本:** 12 4756 4757**参数:** 4758 4759| 名称 | 描述 | 4760| -------- | -------- | 4761| env | 调用JSVM-API的环境。 | 4762| value | 待检查的JSVM_Value。 | 4763| isSymbol | 表示给定的JSVM_Value是否为Symbol。 | 4764 4765**返回:** 4766 4767返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4768 4769 4770### OH_JSVM_IsTypedarray() 4771 4772``` 4773JSVM_EXTERN JSVM_Status OH_JSVM_IsTypedarray (JSVM_Env env, JSVM_Value value, bool * result ) 4774``` 4775 4776**描述** 4777 4778检查传入的Object是否为类型化数组。 4779 4780**起始版本:** 11 4781 4782**参数:** 4783 4784| 名称 | 描述 | 4785| -------- | -------- | 4786| env | 调用JSVM-API的环境。 | 4787| value | 待检查的JavaScript值。 | 4788| result | 给定的JSVM_Value是否代表TypedArray。 | 4789 4790**返回:** 4791 4792返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4793 4794 4795### OH_JSVM_IsUndefined() 4796 4797``` 4798JSVM_EXTERN JSVM_Status OH_JSVM_IsUndefined (JSVM_Env env, JSVM_Value value, bool * isUndefined ) 4799``` 4800 4801**描述** 4802 4803此API检查传入的值是否为Undefined。 这相当于JS中的value === undefined。 4804 4805**起始版本:** 12 4806 4807**参数:** 4808 4809| 名称 | 描述 | 4810| -------- | -------- | 4811| env | 调用JSVM-API的环境。 | 4812| value | 待检查的JSVM_Value。 | 4813| isUndefined | 表示给定的JSVM_Value是否为Undefined。 | 4814 4815**返回:** 4816 4817返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功,这个API不会触发任何异常。 4818 4819 4820### OH_JSVM_IsWasmModuleObject() 4821 4822``` 4823JSVM_EXTERN JSVM_Status OH_JSVM_IsWasmModuleObject (JSVM_Env env, JSVM_Value value, bool * result ) 4824``` 4825 4826**描述** 4827 4828判断给定的 JSVM_Value 是否是一个 WebAssembly 模块。 4829 4830**起始版本:** 12 4831 4832**参数:** 4833 4834| 名称 | 描述 | 4835| -------- | -------- | 4836| env | 调用 JSVM-API 的环境。 | 4837| value | 待检查的 JavaScript 值。 | 4838| result | 输出参数,表示给定的值是否是一个 WebAssembly 模块。 | 4839 4840**返回:** 4841 4842返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4843 4844JSVM_INVALID_ARG 表示传入了空指针参数。 4845 4846 4847### OH_JSVM_JsonParse() 4848 4849``` 4850JSVM_EXTERN JSVM_Status OH_JSVM_JsonParse (JSVM_Env env, JSVM_Value jsonString, JSVM_Value * result ) 4851``` 4852 4853**描述** 4854 4855解析JSON字符串,并返回成功解析的值。 4856 4857**起始版本:** 11 4858 4859**参数:** 4860 4861| 名称 | 描述 | 4862| -------- | -------- | 4863| env | 调用JSVM-API的环境。 | 4864| jsonString | 待解析的字符串。 | 4865| result | 成功解析的值。 | 4866 4867**返回:** 4868 4869返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4870 4871JSVM_STRING_EXPECTED 表示传入的参数不是string类型。 4872 4873JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4874 4875 4876### OH_JSVM_JsonStringify() 4877 4878``` 4879JSVM_EXTERN JSVM_Status OH_JSVM_JsonStringify (JSVM_Env env, JSVM_Value jsonObject, JSVM_Value * result ) 4880``` 4881 4882**描述** 4883 4884将对象字符串化,并返回成功转换后的字符串。 4885 4886**起始版本:** 11 4887 4888**参数:** 4889 4890| 名称 | 描述 | 4891| -------- | -------- | 4892| env | 调用JSVM-API的环境。 | 4893| jsonObject | 待字符串化的对象。 | 4894| result | 成功转换后返回的字符串。 | 4895 4896**返回:** 4897 4898返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4899 4900JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4901 4902 4903### OH_JSVM_MemoryPressureNotification() 4904 4905``` 4906JSVM_EXTERN JSVM_Status OH_JSVM_MemoryPressureNotification (JSVM_Env env, JSVM_MemoryPressureLevel level ) 4907``` 4908 4909**描述** 4910 4911通知虚拟机系统内存不足并有选择地触发垃圾回收。 4912 4913**起始版本:** 11 4914 4915**参数:** 4916 4917| 名称 | 描述 | 4918| -------- | -------- | 4919| env | 调用JSVM-API的环境。 | 4920| level | 要为当前虚拟机设置的内存压力等级。 | 4921 4922**返回:** 4923 4924返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4925 4926 4927### OH_JSVM_NewInstance() 4928 4929``` 4930JSVM_EXTERN JSVM_Status OH_JSVM_NewInstance (JSVM_Env env, JSVM_Value constructor, size_t argc, const JSVM_Value * argv, JSVM_Value * result ) 4931``` 4932 4933**描述** 4934 4935使用给定的JSVM_Value表示的构造函数来实例化新的JavaScript值。 4936 4937**起始版本:** 11 4938 4939**参数:** 4940 4941| 名称 | 描述 | 4942| -------- | -------- | 4943| env | 调用JSVM-API的环境。 | 4944| constructor | 表示将作为构造函数调用的JavaScript函数。 | 4945| argc | argv数组中的元素个数。 | 4946| argv | JavaScript值数组。其中JSVM_Value表示构造函数的参数。 如果argc为零,则可以通过传入NULL来忽略此参数。 | 4947| result | 表示返回的JavaScript对象, 在本例中是构造的对象。 | 4948 4949**返回:** 4950 4951返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4952 4953JSVM_PENDING_EXCEPTION 表示执行的过程中产生了JS异常。 4954 4955 4956### OH_JSVM_ObjectFreeze() 4957 4958``` 4959JSVM_EXTERN JSVM_Status OH_JSVM_ObjectFreeze (JSVM_Env env, JSVM_Value object ) 4960``` 4961 4962**描述** 4963 4964冻结指定的对象。这样可以防止为其添加新的属性、删除现有属性、更改现有属性的 可枚举性、可配置性或可写性、或者更改现有属性的值。它还可以防止改变对象的原型。 4965 4966**起始版本:** 11 4967 4968**参数:** 4969 4970| 名称 | 描述 | 4971| -------- | -------- | 4972| env | 调用JSVM-API的环境。 | 4973| object | 待冻结的对象。 | 4974 4975**返回:** 4976 4977返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 4978 4979JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 4980 4981 4982### OH_JSVM_ObjectGetPrototypeOf() 4983 4984``` 4985JSVM_EXTERN JSVM_Status OH_JSVM_ObjectGetPrototypeOf (JSVM_Env env, JSVM_Value object, JSVM_Value * result ) 4986``` 4987 4988**描述** 4989 4990获取JavaScript object的原型。 4991 4992**起始版本:** 12 4993 4994**参数:** 4995 4996| 名称 | 描述 | 4997| -------- | -------- | 4998| env | 调用JSVM-API的环境。 | 4999| object | 表示待返回其原型的JavaScript object。 | 5000| result | 表示给定对象的原型。 | 5001 5002**返回:** 5003 5004返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 5005 5006JSVM_INVALID_ARG 表示输入参数不合法。 5007 5008**JSVM_PENDING_EXCPTION** 表示API在运行时抛出异常。 5009 5010 5011### OH_JSVM_ObjectSeal() 5012 5013``` 5014JSVM_EXTERN JSVM_Status OH_JSVM_ObjectSeal (JSVM_Env env, JSVM_Value object ) 5015``` 5016 5017**描述** 5018 5019封装指定的对象。这样可以防止为其添加新的属性并且将所有现有属性标记为不可配置。 5020 5021**起始版本:** 11 5022 5023**参数:** 5024 5025| 名称 | 描述 | 5026| -------- | -------- | 5027| env | 调用JSVM-API的环境。 | 5028| object | 待封装的对象。 | 5029 5030**返回:** 5031 5032返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5033 5034JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 5035 5036 5037### OH_JSVM_ObjectSetPrototypeOf() 5038 5039``` 5040JSVM_EXTERN JSVM_Status OH_JSVM_ObjectSetPrototypeOf (JSVM_Env env, JSVM_Value object, JSVM_Value prototype ) 5041``` 5042 5043**描述** 5044 5045设置给定的JavaScript object的原型。 5046 5047**起始版本:** 12 5048 5049**参数:** 5050 5051| 名称 | 描述 | 5052| -------- | -------- | 5053| env | 调用JSVM-API的环境。 | 5054| object | 表示需要设置原型的JavaScript object。 | 5055| prototype | 对象原型。 | 5056 5057**返回:** 5058 5059返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 5060 5061JSVM_INVALID_ARG 表示输入参数不合法。 5062 5063JSVM_GENERIC_FAILURE 表示设置原型失败。如循环设置原型时,会触发该失败。 5064 5065**JSVM_PENDING_EXCPTION** 表示API在运行时抛出异常。 5066 5067 5068### OH_JSVM_OpenEnvScope() 5069 5070``` 5071JSVM_EXTERN JSVM_Status OH_JSVM_OpenEnvScope (JSVM_Env env, JSVM_EnvScope * result ) 5072``` 5073 5074**描述** 5075 5076打开一个新的环境作用域。 5077 5078**起始版本:** 11 5079 5080**参数:** 5081 5082| 名称 | 描述 | 5083| -------- | -------- | 5084| env | 目标环境,JSVM-API接口将在该环境下调用。 | 5085| result | 新的环境作用域。 | 5086 5087**返回:** 5088 5089返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5090 5091 5092### OH_JSVM_OpenEscapableHandleScope() 5093 5094``` 5095JSVM_EXTERN JSVM_Status OH_JSVM_OpenEscapableHandleScope (JSVM_Env env, JSVM_EscapableHandleScope * result ) 5096``` 5097 5098**描述** 5099 5100会打开一个新作用域,从中可以将一个对象提升到外部作用域。 5101 5102**起始版本:** 11 5103 5104**参数:** 5105 5106| 名称 | 描述 | 5107| -------- | -------- | 5108| env | 调用JSVM-API的环境。 | 5109| result | 代表新作用域。 | 5110 5111**返回:** 5112 5113返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5114 5115 5116### OH_JSVM_OpenHandleScope() 5117 5118``` 5119JSVM_EXTERN JSVM_Status OH_JSVM_OpenHandleScope (JSVM_Env env, JSVM_HandleScope * result ) 5120``` 5121 5122**描述** 5123 5124开辟了一个新的作用域。 5125 5126**起始版本:** 11 5127 5128**参数:** 5129 5130| 名称 | 描述 | 5131| -------- | -------- | 5132| env | 调用JSVM-API的环境。 | 5133| result | 代表新作用域。 | 5134 5135**返回:** 5136 5137返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5138 5139 5140### OH_JSVM_OpenInspector() 5141 5142``` 5143JSVM_EXTERN JSVM_Status OH_JSVM_OpenInspector (JSVM_Env env, const char * host, uint16_t port ) 5144``` 5145 5146**描述** 5147 5148在指定的主机和端口上激活inspector,将用来调试JS代码。 5149 5150**起始版本:** 12 5151 5152**参数:** 5153 5154| 名称 | 描述 | 5155| -------- | -------- | 5156| env | 调用JSVM-API的环境。 | 5157| host | 要监听inspector连接的主机IP地址。 | 5158| port | 要监听inspector连接的端口。 | 5159 5160**返回:** 5161 5162返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5163 5164JSVM_PENDING_EXCEPTION 表示执行的过程中产生了JS异常。 5165 5166 5167### OH_JSVM_OpenInspectorWithName() 5168 5169``` 5170JSVM_EXTERN JSVM_Status OH_JSVM_OpenInspectorWithName (JSVM_Env env, int pid, const char * name ) 5171``` 5172 5173**描述** 5174 5175此函数打开一个命名为传入 name 的 inspector,为其打开对应 pid 的 unix domain 端口。 5176 5177**起始版本:** 12 5178 5179**参数:** 5180 5181| 名称 | 描述 | 5182| -------- | -------- | 5183| env | 调用该API的环境。 | 5184| pid | 用于标识 inspector 连接的进程ID。 | 5185| name | inspector 的名字. 如果传入nullptr, 则默认名称为jsvm。 | 5186 5187**返回:** 5188 5189返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 5190 5191JSVM_PENDING_EXCEPTION 表示发生了异常。 5192 5193 5194### OH_JSVM_OpenVMScope() 5195 5196``` 5197JSVM_EXTERN JSVM_Status OH_JSVM_OpenVMScope (JSVM_VM vm, JSVM_VMScope * result ) 5198``` 5199 5200**描述** 5201 5202为虚拟机实例打开一个新的虚拟机作用域。 5203 5204**起始版本:** 11 5205 5206**参数:** 5207 5208| 名称 | 描述 | 5209| -------- | -------- | 5210| vm | 目标虚拟机实例。 | 5211| result | 新的虚拟机作用域。 | 5212 5213**返回:** 5214 5215返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5216 5217 5218### OH_JSVM_PerformMicrotaskCheckpoint() 5219 5220``` 5221JSVM_EXTERN JSVM_Status OH_JSVM_PerformMicrotaskCheckpoint (JSVM_VM vm) 5222``` 5223 5224**描述** 5225 5226检查队列中是否有微任务等待,如果存在则执行它们。 5227 5228**起始版本:** 12 5229 5230**参数:** 5231 5232| 名称 | 描述 | 5233| -------- | -------- | 5234| env | 要检查微任务的虚拟机实例。 | 5235 5236**返回:** 5237 5238返回JSVM函数结果代码。 JSVM_OK 表示执行成功。 5239 5240 5241### OH_JSVM_PumpMessageLoop() 5242 5243``` 5244JSVM_EXTERN JSVM_Status OH_JSVM_PumpMessageLoop (JSVM_VM vm, bool * result ) 5245``` 5246 5247**描述** 5248 5249启动虚拟机内任务队列的运行。这个任务队列可以通过外部事件循环来执行。 5250 5251**起始版本:** 12 5252 5253**参数:** 5254 5255| 名称 | 描述 | 5256| -------- | -------- | 5257| env | 启动任务队列的虚拟机实例。 | 5258| result | 表示任务队列是否成功启动。 | 5259 5260**返回:** 5261 5262返回JSVM函数结果代码。 JSVM_OK 表示执行成功。 5263 5264 5265### OH_JSVM_ReferenceRef() 5266 5267``` 5268JSVM_EXTERN JSVM_Status OH_JSVM_ReferenceRef (JSVM_Env env, JSVM_Ref ref, uint32_t * result ) 5269``` 5270 5271**描述** 5272 5273增加传入引用的引用计数并返回生成的引用计数。 5274 5275**起始版本:** 11 5276 5277**参数:** 5278 5279| 名称 | 描述 | 5280| -------- | -------- | 5281| env | 调用JSVM-API的环境。 | 5282| ref | 传入的引用,其引用计数将增加。 | 5283| result | 新的引用计数。 | 5284 5285**返回:** 5286 5287返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5288 5289 5290### OH_JSVM_ReferenceUnref() 5291 5292``` 5293JSVM_EXTERN JSVM_Status OH_JSVM_ReferenceUnref (JSVM_Env env, JSVM_Ref ref, uint32_t * result ) 5294``` 5295 5296**描述** 5297 5298递减传入引用的引用计数并返回生成的引用计数。 5299 5300**起始版本:** 11 5301 5302**参数:** 5303 5304| 名称 | 描述 | 5305| -------- | -------- | 5306| env | 调用JSVM-API的环境。 | 5307| ref | 将减少其引用计数的JSVM_Ref。 | 5308| result | 新的引用计数。 | 5309 5310**返回:** 5311 5312返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5313 5314JSVM_GENERIC_FAILURE 表示执行失败。 5315 5316 5317### OH_JSVM_RejectDeferred() 5318 5319``` 5320JSVM_EXTERN JSVM_Status OH_JSVM_RejectDeferred (JSVM_Env env, JSVM_Deferred deferred, JSVM_Value rejection ) 5321``` 5322 5323**描述** 5324 5325通过与之关联的延迟对象来拒绝JavaScript Promise。 它只能用于拒绝对应的可用延迟对象的JavaScript Promise。 这意味着Promise必须使用OH_JSVM_CreatePromise()创建,并且 从该调用返回的对象必须保留,才能将其传递给此API。 5326 5327**起始版本:** 11 5328 5329**参数:** 5330 5331| 名称 | 描述 | 5332| -------- | -------- | 5333| env | 调用JSVM-API的环境。 | 5334| deferred | 要解析其关联promise的延迟对象。 | 5335| rejection | 用来拒绝Promise的值。 | 5336 5337**返回:** 5338 5339返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5340 5341 5342### OH_JSVM_ReleaseCache() 5343 5344``` 5345JSVM_EXTERN JSVM_Status OH_JSVM_ReleaseCache (JSVM_Env env, const uint8_t * cacheData, JSVM_CacheType cacheType ) 5346``` 5347 5348**描述** 5349 5350释放给定类型的缓存数据。 5351 5352**起始版本:** 12 5353 5354**参数:** 5355 5356| 名称 | 描述 | 5357| -------- | -------- | 5358| env | 调用 JSVM-API 的环境。 | 5359| cacheData | 待释放的缓存数据,重复释放是未定义行为。 | 5360| cacheType | 缓存的类型,缓存的生成和释放必须一一对应。 | 5361 5362**返回:** 5363 5364返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 5365 5366JSVM_INVALID_ARG 表示传入了空指针参数,或 cacheType 参数不合法。 5367 5368 5369### OH_JSVM_IsBigIntObject() 5370 5371``` 5372JSVM_EXTERN JSVM_Status OH_JSVM_IsBigIntObject(JSVM_Env env, JSVM_Value value, bool* result) 5373``` 5374 5375**描述** 5376 5377判断给定的 JSVM_Value 是否是一个 BigInt对象。 5378 5379**起始版本:** 18 5380 5381**参数:** 5382 5383| 名称 | 描述 | 5384| -------- | -------- | 5385| env | 调用 JSVM-API 的环境。 | 5386| value | 待检查的 JavaScript 值。 | 5387| result | 输出参数,表示给定的值是否是一个BigInt对象。 | 5388 5389**返回:** 5390 5391返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5392 5393JSVM_INVALID_ARG 表示传入了空指针参数。 5394 5395 5396### OH_JSVM_IsBooleanObject() 5397 5398``` 5399JSVM_EXTERN JSVM_Status OH_JSVM_IsBooleanObject(JSVM_Env env, JSVM_Value value, bool* result) 5400``` 5401 5402**描述** 5403 5404判判断给定的 JSVM_Value 是否是一个 Boolean对象。 5405 5406**起始版本:** 18 5407 5408**参数:** 5409 5410| 名称 | 描述 | 5411| -------- | -------- | 5412| env | 调用 JSVM-API 的环境。 | 5413| value | 待检查的 JavaScript 值。 | 5414| result | 输出参数,表示给定的值是否是一个Boolean对象。 | 5415 5416**返回:** 5417 5418返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5419 5420JSVM_INVALID_ARG 表示传入了空指针参数。 5421 5422 5423### OH_JSVM_IsStringObject() 5424 5425``` 5426JSVM_EXTERN JSVM_Status OH_JSVM_IsStringObject(JSVM_Env env, JSVM_Value value, bool* result) 5427``` 5428 5429**描述** 5430 5431判判断给定的 JSVM_Value 是否是一个 String对象。 5432 5433**起始版本:** 18 5434 5435**参数:** 5436 5437| 名称 | 描述 | 5438| -------- | -------- | 5439| env | 调用 JSVM-API 的环境。 | 5440| value | 待检查的 JavaScript 值。 | 5441| result | 输出参数,表示给定的值是否是一个String对象。 | 5442 5443**返回:** 5444 5445返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5446 5447JSVM_INVALID_ARG 表示传入了空指针参数。 5448 5449 5450### OH_JSVM_IsNumberObject() 5451 5452``` 5453JSVM_EXTERN JSVM_Status OH_JSVM_IsNumberObject(JSVM_Env env, JSVM_Value value, bool* result) 5454``` 5455 5456**描述** 5457 5458判判断给定的 JSVM_Value 是否是一个 Number对象。 5459 5460**起始版本:** 18 5461 5462**参数:** 5463 5464| 名称 | 描述 | 5465| -------- | -------- | 5466| env | 调用 JSVM-API 的环境。 | 5467| value | 待检查的 JavaScript 值。 | 5468| result | 输出参数,表示给定的值是否是一个Number对象。 | 5469 5470**返回:** 5471 5472返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5473 5474JSVM_INVALID_ARG 表示传入了空指针参数。 5475 5476 5477### OH_JSVM_IsSymbolObject() 5478 5479``` 5480JSVM_EXTERN JSVM_Status OH_JSVM_IsSymbolObject(JSVM_Env env, JSVM_Value value, bool* result) 5481``` 5482 5483**描述** 5484 5485判判断给定的 JSVM_Value 是否是一个 Symbol对象。 5486 5487**起始版本:** 18 5488 5489**参数:** 5490 5491| 名称 | 描述 | 5492| -------- | -------- | 5493| env | 调用 JSVM-API 的环境。 | 5494| value | 待检查的 JavaScript 值。 | 5495| result | 输出参数,表示给定的值是否是一个Symbol对象。 | 5496 5497**返回:** 5498 5499返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5500 5501JSVM_INVALID_ARG 表示传入了空指针参数。 5502 5503 5504### OH_JSVM_GetSymbolAsyncIterator() 5505 5506``` 5507JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolAsyncIterator(JSVM_Env env, JSVM_Value* result) 5508``` 5509 5510**描述** 5511 5512获取Well-Known symbol里的Symbol.AsyncIterator能力。 5513 5514**起始版本:** 18 5515 5516**参数:** 5517 5518| 名称 | 描述 | 5519| -------- | -------- | 5520| env | 调用 JSVM-API 的环境。 | 5521| result | 输出参数,Well-Known symbol里的Symbol.AsyncIterator。 | 5522 5523**返回:** 5524 5525返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5526 5527JSVM_INVALID_ARG 表示传入了空指针参数。 5528 5529 5530### OH_JSVM_GetSymbolHasInstance() 5531 5532``` 5533JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolHasInstance(JSVM_Env env, JSVM_Value* result) 5534``` 5535 5536**描述** 5537 5538获取Well-Known symbol里的Symbol.HasInstance能力。 5539 5540**起始版本:** 18 5541 5542**参数:** 5543 5544| 名称 | 描述 | 5545| -------- | -------- | 5546| env | 调用 JSVM-API 的环境。 | 5547| result | 输出参数,Well-Known symbol里的Symbol.HasInstance。 | 5548 5549**返回:** 5550 5551返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5552 5553JSVM_INVALID_ARG 表示传入了空指针参数。 5554 5555 5556### OH_JSVM_GetSymbolIsConcatSpreadable() 5557 5558``` 5559JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolIsConcatSpreadable(JSVM_Env env, JSVM_Value* result) 5560``` 5561 5562**描述** 5563 5564获取Well-Known symbol里的Symbol.IsConcatSpreadable能力。 5565 5566**起始版本:** 18 5567 5568**参数:** 5569 5570| 名称 | 描述 | 5571| -------- | -------- | 5572| env | 调用 JSVM-API 的环境。 | 5573| result | 输出参数,Well-Known symbol里的Symbol.IsConcatSpreadable。 | 5574 5575**返回:** 5576 5577返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5578 5579JSVM_INVALID_ARG 表示传入了空指针参数。 5580 5581 5582### OH_JSVM_GetSymbolMatch() 5583 5584``` 5585JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolMatch(JSVM_Env env, JSVM_Value* result) 5586``` 5587 5588**描述** 5589 5590获取Well-Known symbol里的Symbol.Match能力。 5591 5592**起始版本:** 18 5593 5594**参数:** 5595 5596| 名称 | 描述 | 5597| -------- | -------- | 5598| env | 调用 JSVM-API 的环境。 | 5599| result | 输出参数,Well-Known symbol里的Symbol.Match。 | 5600 5601**返回:** 5602 5603返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5604 5605JSVM_INVALID_ARG 表示传入了空指针参数。 5606 5607 5608### OH_JSVM_GetSymbolReplace() 5609 5610``` 5611JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolReplace(JSVM_Env env, JSVM_Value* result) 5612``` 5613 5614**描述** 5615 5616获取Well-Known symbol里的Symbol.Replace能力。 5617 5618**起始版本:** 18 5619 5620**参数:** 5621 5622| 名称 | 描述 | 5623| -------- | -------- | 5624| env | 调用 JSVM-API 的环境。 | 5625| result | 输出参数,Well-Known symbol里的Symbol.Replace。 | 5626 5627**返回:** 5628 5629返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5630 5631JSVM_INVALID_ARG 表示传入了空指针参数。 5632 5633 5634### OH_JSVM_GetSymbolSearch() 5635 5636``` 5637JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolSearch(JSVM_Env env, JSVM_Value* result) 5638``` 5639 5640**描述** 5641 5642获取Well-Known symbol里的Symbol.Search能力。 5643 5644**起始版本:** 18 5645 5646**参数:** 5647 5648| 名称 | 描述 | 5649| -------- | -------- | 5650| env | 调用 JSVM-API 的环境。 | 5651| result | 输出参数,Well-Known symbol里的Symbol.Search。 | 5652 5653**返回:** 5654 5655返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5656 5657JSVM_INVALID_ARG 表示传入了空指针参数。 5658 5659 5660### OH_JSVM_GetSymbolSplit() 5661 5662``` 5663JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolSplit(JSVM_Env env, JSVM_Value* result) 5664``` 5665 5666**描述** 5667 5668获取Well-Known symbol里的Symbol.Split能力。 5669 5670**起始版本:** 18 5671 5672**参数:** 5673 5674| 名称 | 描述 | 5675| -------- | -------- | 5676| env | 调用 JSVM-API 的环境。 | 5677| result | 输出参数,Well-Known symbol里的Symbol.Split。 | 5678 5679**返回:** 5680 5681返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5682 5683JSVM_INVALID_ARG 表示传入了空指针参数。 5684 5685 5686### OH_JSVM_GetSymbolToPrimitive() 5687 5688``` 5689JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolToPrimitive(JSVM_Env env, JSVM_Value* result) 5690``` 5691 5692**描述** 5693 5694获取Well-Known symbol里的Symbol.ToPrimitive能力。 5695 5696**起始版本:** 18 5697 5698**参数:** 5699 5700| 名称 | 描述 | 5701| -------- | -------- | 5702| env | 调用 JSVM-API 的环境。 | 5703| result | 输出参数,Well-Known symbol里的Symbol.ToPrimitive。 | 5704 5705**返回:** 5706 5707返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5708 5709JSVM_INVALID_ARG 表示传入了空指针参数。 5710 5711 5712### OH_JSVM_GetSymbolUnscopables() 5713 5714``` 5715JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolUnscopables(JSVM_Env env, JSVM_Value* result) 5716``` 5717 5718**描述** 5719 5720获取Well-Known symbol里的Symbol.Unscopables能力。 5721 5722**起始版本:** 18 5723 5724**参数:** 5725 5726| 名称 | 描述 | 5727| -------- | -------- | 5728| env | 调用 JSVM-API 的环境。 | 5729| result | 输出参数,Well-Known symbol里的Symbol.Unscopables。 | 5730 5731**返回:** 5732 5733返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5734 5735JSVM_INVALID_ARG 表示传入了空指针参数。 5736 5737 5738### OH_JSVM_GetSymbolToStringTag() 5739 5740``` 5741JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolToStringTag(JSVM_Env env, JSVM_Value* result) 5742``` 5743 5744**描述** 5745 5746获取Well-Known symbol里的Symbol.ToStringTag能力。 5747 5748**起始版本:** 18 5749 5750**参数:** 5751 5752| 名称 | 描述 | 5753| -------- | -------- | 5754| env | 调用 JSVM-API 的环境。 | 5755| result | 输出参数,Well-Known symbol里的Symbol.ToStringTag。 | 5756 5757**返回:** 5758 5759返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5760 5761JSVM_INVALID_ARG 表示传入了空指针参数。 5762 5763 5764### OH_JSVM_GetSymbolIterator() 5765 5766``` 5767JSVM_EXTERN JSVM_Status OH_JSVM_GetSymbolIterator(JSVM_Env env, JSVM_Value* result) 5768``` 5769 5770**描述** 5771 5772获取Well-Known symbol里的Symbol.Iterator能力。 5773 5774**起始版本:** 18 5775 5776**参数:** 5777 5778| 名称 | 描述 | 5779| -------- | -------- | 5780| env | 调用 JSVM-API 的环境。 | 5781| result | 输出参数,Well-Known symbol里的Symbol.Iterator。 | 5782 5783**返回:** 5784 5785返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5786 5787JSVM_INVALID_ARG 表示传入了空指针参数。 5788 5789 5790### OH_JSVM_TraceStart() 5791 5792``` 5793JSVM_EXTERN JSVM_Status OH_JSVM_TraceStart(size_t count, const JSVM_TraceCategory* categories, const char* tag, size_t eventsCount) 5794``` 5795 5796**描述** 5797 5798对所有 JSVM 运行时实例,开始采集指定 Trace 类别的信息。(线程不安全) 5799 5800**起始版本:** 18 5801 5802**参数:** 5803 5804| 名称 | 描述 | 5805| -------- | -------- | 5806| count | 进行 Trace 采集的分类数量。 | 5807| categories | 进行 Trace 采集的具体分类数组。 | 5808| tag | 用户定义并赋予 Trace 数据的标签。 | 5809| eventsCount | 存储的 Trace 事件数量上限。 | 5810 5811**返回:** 5812 5813返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5814 5815JSVM_INVALID_ARG categories或者count输入不合法。 5816 5817 5818### OH_JSVM_TraceStop() 5819 5820``` 5821JSVM_EXTERN JSVM_Status OH_JSVM_TraceStop(JJSVM_OutputStream stream, void* streamData) 5822``` 5823 5824**描述** 5825 5826对所有 JSVM 运行时,结束采集指定 Trace 类别的信息。(线程不安全) 5827 5828**起始版本:** 18 5829 5830**参数:** 5831 5832| 名称 | 描述 | 5833| -------- | -------- | 5834| stream | 输出流回调函数,实现接收 Trace 数据功能。 | 5835| streamData | streamData的输出流指针,用于辅助输出流回调函数进行数据输出。 | 5836 5837**返回:** 5838 5839返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5840 5841JSVM_INVALID_ARG stream或者streamData输入不合法。 5842 5843 5844### OH_JSVM_AddHandlerForGC() 5845 5846``` 5847JSVM_EXTERN JSVM_Status OH_JSVM_AddHandlerForGC(JSVM_VM vm, JSVM_CBTriggerTimeForGC triggerTime, JSVM_HandlerForGC handler, JSVM_GCType gcType, void* userData) 5848``` 5849 5850**描述** 5851 5852在VM中添加GC的回调函数。 5853 5854**起始版本:** 18 5855 5856**参数:** 5857 5858| 名称 | 描述 | 5859| -------- | -------- | 5860| vm | 调用JSVM-API的环境。 | 5861| triggerTime | 触发GC回调函数的时机。 | 5862| handler | 当触发GC时,传入的回调函数会被调用。 | 5863| gcType | GC类型。 | 5864| userData | 原生指针数据。 | 5865 5866**返回:** 5867 5868返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5869 5870JSVM_INVALID_ARG 表示传入的vm或者handler为空或者handler已经被添加过了。 5871 5872 5873### OH_JSVM_RemoveHandlerForGC() 5874 5875``` 5876JSVM_EXTERN JSVM_Status OH_JSVM_RemoveHandlerForGC(JSVM_VM vm, JSVM_CBTriggerTimeForGC triggerTime, JSVM_HandlerForGC handler, void* userData) 5877``` 5878 5879**描述** 5880 5881在VM中移除GC的回调函数。 5882 5883**起始版本:** 18 5884 5885**参数:** 5886 5887| 名称 | 描述 | 5888| -------- | -------- | 5889| vm | 调用JSVM-API的环境。 | 5890| triggerTime | 触发GC回调函数的时机。 | 5891| handler | 当触发GC时,传入的回调函数会被调用。 | 5892| userData | 原生指针数据。 | 5893 5894**返回:** 5895 5896返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5897 5898JSVM_INVALID_ARG 表示传入的vm或者handler为空或者handler已经被删除过了。 5899 5900 5901### OH_JSVM_SetHandlerForOOMError() 5902 5903``` 5904JSVM_EXTERN JSVM_Status OH_JSVM_SetHandlerForOOMError(JSVM_VM vm, JSVM_HandlerForOOMError handler) 5905``` 5906 5907**描述** 5908 5909为OOM错误设置回调处理。当接口被重复调用时,仅最后一次生效。当传入的handler为null时,表示取消之前的设置。 5910 5911**起始版本:** 18 5912 5913**参数:** 5914 5915| 名称 | 描述 | 5916| -------- | -------- | 5917| vm | 调用JSVM-API的环境。 | 5918| handler | OOM错误的处理器。 | 5919 5920**返回:** 5921 5922返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5923 5924JSVM_INVALID_ARG 表示vm为空。 5925 5926 5927### OH_JSVM_SetHandlerForFatalError() 5928 5929``` 5930JSVM_EXTERN JSVM_Status OH_JSVM_SetHandlerForFatalError(JSVM_VM vm, JSVM_HandlerForFatalError handler) 5931``` 5932 5933**描述** 5934 5935Fatal错误设置回调处理。当接口被重复调用时,仅最后一次生效。当传入的handler为null时,表示取消之前的设置。 5936 5937**起始版本:** 18 5938 5939**参数:** 5940 5941| 名称 | 描述 | 5942| -------- | -------- | 5943| vm | 调用JSVM-API的环境。 | 5944| handler | Fatal错误的处理器。 | 5945 5946**返回:** 5947 5948返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5949 5950JSVM_INVALID_ARG 表示vm为空。 5951 5952 5953### OH_JSVM_SetHandlerForPromiseReject() 5954 5955``` 5956JSVM_EXTERN JSVM_Status OH_JSVM_SetHandlerForPromiseReject(JSVM_VM vm, JSVM_HandlerForPromiseReject handler) 5957``` 5958 5959**描述** 5960 5961为PromiseReject错误设置回调处理。当接口被重复调用时,仅最后一次生效。当传入的handler为null时,表示取消之前的设置。 5962 5963**起始版本:** 18 5964 5965**参数:** 5966 5967| 名称 | 描述 | 5968| -------- | -------- | 5969| vm | 调用JSVM-API的环境。 | 5970| handler | PromiseReject错误的处理器。 | 5971 5972**返回:** 5973 5974返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 5975 5976JSVM_INVALID_ARG 表示vm为空。 5977 5978 5979### OH_JSVM_DefineClassWithOptions() 5980 5981``` 5982JSVM_EXTERN JSVM_Status OH_JSVM_DefineClassWithOptions(JSVM_Env env, const char* utf8name, size_t length, JSVM_Callback constructor, size_t propertyCount, const JSVM_PropertyDescriptor* properties, JSVM_Value parentClass, size_t optionCount, JSVM_DefineClassOptions options[], JSVM_Value* result) 5983``` 5984 5985**描述** 5986 5987在封装一个 C++ 类时,通过构造函数传递的 C++ 构造函数回调应该是类中的一个静态方法,该方法调用实际的类构造函数,然后根据传入的不同选项,将新的 C++ 实例封装在一个 JavaScript 对象中,并返回封装对象。 5988 5989**起始版本:** 18 5990 5991**参数:** 5992 5993| 名称 | 描述 | 5994| -------- | -------- | 5995| env | 调用JSVM-API的环境。 | 5996| utf8name | JavaScript构造函数的名称,建议在包装C++类时使用C++类名。 | 5997| length | utf8name的长度(以字节为单位)或JSVM_AUTO_LENGTH(如果以 null 结尾)。 | 5998| constructor | 用于创建类的构造函数的回调函数。包装C++类时,此方法必须是符合JSVM_Callback。<br/>callback签名的静态成员。不能使用C++类构造函数。详情请参考JSVM_Callback。 | 5999| propertyCount | properties数组参数中的项目数量。 | 6000| properties | 类的属性描述符,用于定义类的属性和方法。 | 6001| parentClass | 当前所定义的class的父类class。 | 6002| optionCount | options数组参数中的项目数量。 | 6003| options[] | 传入的用于定义class的选项数组。 | 6004| result | 表示类的构造函数的JSVM_Value。 | 6005 6006**返回:** 6007 6008返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。<br/> 6009 6010JSVM_INVALID_ARG 表示vm为空。<br/> 6011 6012JSVM_GENERIC_FAILURE 表示传入的utf8name | constructor | properties无效,导致执行失败。 6013 6014 6015### OH_JSVM_ReleaseScript() 6016 6017``` 6018JSVM_EXTERN JSVM_Status OH_JSVM_ReleaseScript (JSVM_Env env, JSVM_Script script ) 6019``` 6020 6021**描述** 6022 6023此函数释放由OH_JSVM_RetainScript保留的脚本,释放后应避免对传入 script 的再次使用. 6024 6025**起始版本:** 12 6026 6027**参数:** 6028 6029| 名称 | 描述 | 6030| -------- | -------- | 6031| env | 调用该API的环境. | 6032| script | 包含要释放的脚本的JavaScript字符串. | 6033 6034**返回:** 6035 6036返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 6037 6038JSVM_INVALID_ARG 表示脚本为空或未被保存过. 6039 6040 6041### OH_JSVM_RemoveWrap() 6042 6043``` 6044JSVM_EXTERN JSVM_Status OH_JSVM_RemoveWrap (JSVM_Env env, JSVM_Value jsObject, void ** result ) 6045``` 6046 6047**描述** 6048 6049使用OH_JSVM_Wrap()检索先前封装在JavaScript对象js_object中的native实例并移除封装。 如果finalize回调与封装相关联,则当JavaScript对象被垃圾回收时将不再调用它。 6050 6051**起始版本:** 11 6052 6053**参数:** 6054 6055| 名称 | 描述 | 6056| -------- | -------- | 6057| env | 调用JSVM-API的环境。 | 6058| jsObject | 与native实例关联的对象。 | 6059| result | 指向封装的native实例的指针。 | 6060 6061**返回:** 6062 6063返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6064 6065 6066### OH_JSVM_ResolveDeferred() 6067 6068``` 6069JSVM_EXTERN JSVM_Status OH_JSVM_ResolveDeferred (JSVM_Env env, JSVM_Deferred deferred, JSVM_Value resolution ) 6070``` 6071 6072**描述** 6073 6074通过与之关联的延迟对象来解析JavaScript promise。 它只能用于解析对应的可用的延迟对象的JavaScript Promise。 这意味着Promise必须使用OH_JSVM_CreatePromise()创建,并且 从该调用返回的对象必须保留,才能将其传递给此API。 6075 6076**起始版本:** 11 6077 6078**参数:** 6079 6080| 名称 | 描述 | 6081| -------- | -------- | 6082| env | 调用JSVM-API的环境。 | 6083| deferred | 要解析其关联promise的延迟对象。 | 6084| resolution | 用来解决Promise的值。 | 6085 6086**返回:** 6087 6088返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6089 6090 6091### OH_JSVM_RetainScript() 6092 6093``` 6094JSVM_EXTERN JSVM_Status OH_JSVM_RetainScript (JSVM_Env env, JSVM_Script script ) 6095``` 6096 6097**描述** 6098 6099持久保存一个JSVM_Script并将其生命周期延长到当前作用域之外。 6100 6101**起始版本:** 12 6102 6103**参数:** 6104 6105| 名称 | 描述 | 6106| -------- | -------- | 6107| env | 调用该API的环境。 | 6108| script | 包含要持久化保存脚本的JavaScript字符串。 | 6109 6110**返回:** 6111 6112返回执行状态码 JSVM_Status JSVM_OK 表示执行成功。 6113 6114JSVM_INVALID_ARG 表示脚本为空或已被保存过. 6115 6116 6117### OH_JSVM_RunScript() 6118 6119``` 6120JSVM_EXTERN JSVM_Status OH_JSVM_RunScript (JSVM_Env env, JSVM_Script script, JSVM_Value * result ) 6121``` 6122 6123**描述** 6124 6125执行一串JavaScript代码并返回其结果,其中包含以下注意事项: 与eval不同的是,该函数不允许脚本访问当前词法作用域,因此也不允许访问模块作用域, 这意味着require等伪全局变量将不可用。 脚本可以访问全局作用域。 脚本中的函数和var声明将被添加到全局对象。 使用let和const的变量声明将全局可见,但不会被添加到全局对象。 this的值在脚本内是global。 6126 6127**起始版本:** 11 6128 6129**参数:** 6130 6131| 名称 | 描述 | 6132| -------- | -------- | 6133| env | 调用JSVM-API的环境。 | 6134| script | 包含要执行的脚本的JavaScript字符串。 | 6135| result | 执行脚本产生的值。 | 6136 6137**返回:** 6138 6139返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6140 6141JSVM_GENERIC_FAILURE 表示执行失败。 6142 6143 6144### OH_JSVM_SetElement() 6145 6146``` 6147JSVM_EXTERN JSVM_Status OH_JSVM_SetElement (JSVM_Env env, JSVM_Value object, uint32_t index, JSVM_Value value ) 6148``` 6149 6150**描述** 6151 6152在传入的Object上设置一个元素。 6153 6154**起始版本:** 11 6155 6156**参数:** 6157 6158| 名称 | 描述 | 6159| -------- | -------- | 6160| env | 调用JSVM-API的环境。 | 6161| object | 待进行属性设置的对象。 | 6162| index | 要设置的属性的索引。 | 6163| value | 属性值。 | 6164 6165**返回:** 6166 6167返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6168 6169JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 6170 6171 6172### OH_JSVM_SetInstanceData() 6173 6174``` 6175JSVM_EXTERN JSVM_Status OH_JSVM_SetInstanceData (JSVM_Env env, void * data, JSVM_Finalize finalizeCb, void * finalizeHint ) 6176``` 6177 6178**描述** 6179 6180将data与当前运行的JSVM环境相关联。后续可以使用OH_JSVM_GetInstanceData()检索data。 通过先前调用OH_JSVM_SetInstanceData()设置的任何与当前运行的JSVM环境相关联的现有数据都将 被覆盖。如果先前提供了finalizeCb,则不会调用它。 6181 6182**起始版本:** 11 6183 6184**参数:** 6185 6186| 名称 | 描述 | 6187| -------- | -------- | 6188| env | 调用JSVM-API的环境。 | 6189| data | 可用于此实例的绑定的数据项。 | 6190| finalizeCb | 销毁环境时调用的函数,该函数接收data以便释放它。 | 6191| finalizeHint | 在收集期间传递给最终回调的可选提示。 | 6192 6193**返回:** 6194 6195返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6196 6197 6198### OH_JSVM_SetNamedProperty() 6199 6200``` 6201JSVM_EXTERN JSVM_Status OH_JSVM_SetNamedProperty (JSVM_Env env, JSVM_Value object, const char * utf8name, JSVM_Value value ) 6202``` 6203 6204**描述** 6205 6206此方法等效于调用OH_JSVM_SetProperty, 其中,通过utf8Name传入的字符串用于创建JSVM_Value。 6207 6208**起始版本:** 11 6209 6210**参数:** 6211 6212| 名称 | 描述 | 6213| -------- | -------- | 6214| env | 调用JSVM-API的环境。 | 6215| object | 要对其设置属性的对象。 | 6216| utf8Name | 要设置的属性的名称。 | 6217| value | 属性值。 | 6218 6219**返回:** 6220 6221返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6222 6223JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 6224 6225 6226### OH_JSVM_SetProperty() 6227 6228``` 6229JSVM_EXTERN JSVM_Status OH_JSVM_SetProperty (JSVM_Env env, JSVM_Value object, JSVM_Value key, JSVM_Value value ) 6230``` 6231 6232**描述** 6233 6234为传入的object设置一个属性。 6235 6236**起始版本:** 11 6237 6238**参数:** 6239 6240| 名称 | 描述 | 6241| -------- | -------- | 6242| env | 调用JSVM-API的环境。 | 6243| object | 将进行属性设置的对象。 | 6244| key | 待设置的属性名。 | 6245| value | 属性值。 | 6246 6247**返回:** 6248 6249返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6250 6251JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 6252 6253 6254### OH_JSVM_StartCpuProfiler() 6255 6256``` 6257JSVM_EXTERN JSVM_Status OH_JSVM_StartCpuProfiler (JSVM_VM vm, JSVM_CpuProfiler * result ) 6258``` 6259 6260**描述** 6261 6262创建并启动一个CPU profiler。 6263 6264**起始版本:** 12 6265 6266**参数:** 6267 6268| 名称 | 描述 | 6269| -------- | -------- | 6270| vm | 启动CPU profiler的虚拟机。 | 6271| result | 指向CPU profiler的指针。 | 6272 6273**返回:** 6274 6275返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6276 6277 6278### OH_JSVM_StopCpuProfiler() 6279 6280``` 6281JSVM_EXTERN JSVM_Status OH_JSVM_StopCpuProfiler (JSVM_VM vm, JSVM_CpuProfiler profiler, JSVM_OutputStream stream, void * streamData ) 6282``` 6283 6284**描述** 6285 6286停止CPU profiler并将结果输出到流。 6287 6288**起始版本:** 12 6289 6290**参数:** 6291 6292| 名称 | 描述 | 6293| -------- | -------- | 6294| vm | 启动CPU profiler的虚拟机。 | 6295| profiler | 要停止的CPU profiler。 | 6296| stream | 接收数据的输出流回调。 | 6297| streamData | 传递给输出流回调的可选数据。例如,可以是一个文件流,用来将输出流回调中传递的采样数据写入文件。 | 6298 6299**返回:** 6300 6301返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6302 6303 6304### OH_JSVM_StrictEquals() 6305 6306``` 6307JSVM_EXTERN JSVM_Status OH_JSVM_StrictEquals (JSVM_Env env, JSVM_Value lhs, JSVM_Value rhs, bool * result ) 6308``` 6309 6310**描述** 6311 6312提供类似调用严格相等算法的行为。 6313 6314**起始版本:** 11 6315 6316**参数:** 6317 6318| 名称 | 描述 | 6319| -------- | -------- | 6320| env | 调用JSVM-API的环境。 | 6321| lhs | 待检查的JavaScript值。 | 6322| rhs | 要检查的JavaScript值。 | 6323| result | 表示两个JSVM_Value对象是否相等。 | 6324 6325**返回:** 6326 6327返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6328 6329 6330### OH_JSVM_SymbolFor() 6331 6332``` 6333JSVM_EXTERN JSVM_Status OH_JSVM_SymbolFor (JSVM_Env env, const char * utf8description, size_t length, JSVM_Value * result ) 6334``` 6335 6336**描述** 6337 6338在全局注册表中搜索具有给定描述的现有符号。如果该 符号已经存在,它将被返回,否则将在注册表中创建一个新符号。 6339 6340**起始版本:** 11 6341 6342**参数:** 6343 6344| 名称 | 描述 | 6345| -------- | -------- | 6346| env | 调用JSVM-API的环境。 | 6347| utf8description | UTF-8 C 字符串,表示用作符号描述的文本。 | 6348| length | 描述字符串的长度,以字节为单位。如果字符串以null结尾,则为JSVM_AUTO_LENGTH。 | 6349| result | 表示JavaScript 符号的JSVM_Value。 | 6350 6351**返回:** 6352 6353返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6354 6355 6356### OH_JSVM_TakeHeapSnapshot() 6357 6358``` 6359JSVM_EXTERN JSVM_Status OH_JSVM_TakeHeapSnapshot (JSVM_VM vm, JSVM_OutputStream stream, void * streamData ) 6360``` 6361 6362**描述** 6363 6364获取当前堆快照并将其输出到流。 6365 6366**起始版本:** 12 6367 6368**参数:** 6369 6370| 名称 | 描述 | 6371| -------- | -------- | 6372| vm | 将被获取堆快照的虚拟机。 | 6373| stream | 接收数据的输出流回调。 | 6374| streamData | 传递给输出流回调的可选数据。例如,可以是一个文件流,用来将输出流回调中传递的采样数据写入文件。 | 6375 6376**返回:** 6377 6378返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6379 6380 6381### OH_JSVM_Throw() 6382 6383``` 6384JSVM_EXTERN JSVM_Status OH_JSVM_Throw (JSVM_Env env, JSVM_Value error ) 6385``` 6386 6387**描述** 6388 6389抛出提供的JavaScript值。 6390 6391**起始版本:** 11 6392 6393**参数:** 6394 6395| 名称 | 描述 | 6396| -------- | -------- | 6397| env | 调用JSVM-API的环境。 | 6398| error | 要抛出的JavaScript值。 | 6399 6400**返回:** 6401 6402返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6403 6404 6405### OH_JSVM_ThrowError() 6406 6407``` 6408JSVM_EXTERN JSVM_Status OH_JSVM_ThrowError (JSVM_Env env, const char * code, const char * msg ) 6409``` 6410 6411**描述** 6412 6413会抛出带有所提供文本的JavaScript Error。 6414 6415**起始版本:** 11 6416 6417**参数:** 6418 6419| 名称 | 描述 | 6420| -------- | -------- | 6421| env | 调用JSVM-API的环境。 | 6422| code | 要在错误上设置的可选错误代码。 | 6423| msg | 表示与错误关联的文本的C字符串。 | 6424 6425**返回:** 6426 6427返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6428 6429 6430### OH_JSVM_ThrowRangeError() 6431 6432``` 6433JSVM_EXTERN JSVM_Status OH_JSVM_ThrowRangeError (JSVM_Env env, const char * code, const char * msg ) 6434``` 6435 6436**描述** 6437 6438会抛出带有所提供文本的JavaScript RangeError。 6439 6440**起始版本:** 11 6441 6442**参数:** 6443 6444| 名称 | 描述 | 6445| -------- | -------- | 6446| env | 调用JSVM-API的环境。 | 6447| code | 要在错误上设置的可选错误代码。 | 6448| msg | 表示与错误关联的文本的C字符串。 | 6449 6450**返回:** 6451 6452返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6453 6454 6455### OH_JSVM_ThrowSyntaxError() 6456 6457``` 6458JSVM_EXTERN JSVM_Status OH_JSVM_ThrowSyntaxError (JSVM_Env env, const char * code, const char * msg ) 6459``` 6460 6461**描述** 6462 6463会抛出带有所提供文本的JavaScript SyntaxError。 6464 6465**起始版本:** 11 6466 6467**参数:** 6468 6469| 名称 | 描述 | 6470| -------- | -------- | 6471| env | 调用JSVM-API的环境。 | 6472| code | 要在错误上设置的可选错误代码。 | 6473| msg | 表示与错误关联的文本的C字符串。 | 6474 6475**返回:** 6476 6477返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6478 6479 6480### OH_JSVM_ThrowTypeError() 6481 6482``` 6483JSVM_EXTERN JSVM_Status OH_JSVM_ThrowTypeError (JSVM_Env env, const char * code, const char * msg ) 6484``` 6485 6486**描述** 6487 6488会抛出带有所提供文本的JavaScript TypeError。 6489 6490**起始版本:** 11 6491 6492**参数:** 6493 6494| 名称 | 描述 | 6495| -------- | -------- | 6496| env | 调用JSVM-API的环境。 | 6497| code | 要在错误上设置的可选错误代码。 | 6498| msg | 表示与错误关联的文本的C字符串。 | 6499 6500**返回:** 6501 6502返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6503 6504 6505### OH_JSVM_Typeof() 6506 6507``` 6508JSVM_EXTERN JSVM_Status OH_JSVM_Typeof (JSVM_Env env, JSVM_Value value, JSVM_ValueType * result ) 6509``` 6510 6511**描述** 6512 6513提供类似于在定义的对象上调用typeof运算符的行为。 不同点在于,该函数支持检测外部值;它将null检测为单独的类型, 而ECMAScript typeof将用于检测object。如果value的类型无效,则返回错误。 6514 6515**起始版本:** 11 6516 6517**参数:** 6518 6519| 名称 | 描述 | 6520| -------- | -------- | 6521| env | 调用JSVM-API的环境。 | 6522| value | 要查询其类型的JavaScript值。 | 6523| result | JavaScript值的类型。 | 6524 6525**返回:** 6526 6527返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6528 6529JSVM_INVALID_ARG 表示传入的参数不合法。 6530 6531 6532### OH_JSVM_TypeTagObject() 6533 6534``` 6535JSVM_EXTERN JSVM_Status OH_JSVM_TypeTagObject (JSVM_Env env, JSVM_Value value, const JSVM_TypeTag * typeTag ) 6536``` 6537 6538**描述** 6539 6540将typeTag指针的值与JavaScript对象或外部值相关联。可调用OH_JSVM_CheckObjectTypeTag() 判断附加在对象上的标记类型,以确保对象的类型正确。如果对象已经有关联的类型标记,则返回JSVM_INVALID_ARG。 6541 6542**起始版本:** 11 6543 6544**参数:** 6545 6546| 名称 | 描述 | 6547| -------- | -------- | 6548| env | 调用JSVM-API的环境。 | 6549| value | 要标记的JavaScript对象或外部值。 | 6550| typeTag | 要标记对象的标签。 | 6551 6552**返回:** 6553 6554返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6555 6556JSVM_INVALID_ARG 表示传入的参数不合法。 6557 6558JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 6559 6560 6561### OH_JSVM_Unwrap() 6562 6563``` 6564JSVM_EXTERN JSVM_Status OH_JSVM_Unwrap (JSVM_Env env, JSVM_Value jsObject, void ** result ) 6565``` 6566 6567**描述** 6568 6569当JavaScript代码调用类的方法或属性访问器时,对应的JSVM_Callback将被调用。 如果回调是针对实例方法或访问器的,则回调的this参数是封装器对象;然后可以通过调用 封装器对象的OH_JSVM_Unwrap()获得作为调用目标的C++实例。 6570 6571**起始版本:** 11 6572 6573**参数:** 6574 6575| 名称 | 描述 | 6576| -------- | -------- | 6577| env | 调用JSVM-API的环境。 | 6578| jsObject | 与native实例关联的对象。 | 6579| result | 指向封装的native实例的指针。 | 6580 6581**返回:** 6582 6583返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6584 6585JSVM_INVALID_ARG 表示传入的参数不合法。 6586 6587 6588### OH_JSVM_WaitForDebugger() 6589 6590``` 6591JSVM_EXTERN JSVM_Status OH_JSVM_WaitForDebugger (JSVM_Env env, bool breakNextLine ) 6592``` 6593 6594**描述** 6595 6596等待主机与inspector建立socket连接,连接建立后程序将继续运行。 发送Runtime.runIfWaitingForDebugger命令。 6597 6598**起始版本:** 12 6599 6600**参数:** 6601 6602| 名称 | 描述 | 6603| -------- | -------- | 6604| env | 调用JSVM-API的环境。 | 6605| breakNextLine | 是否在下一行JavaScript代码中中断。传递“是”,后续将暂停在运行下一行JS代码时,继续运行需要开发者通过调试器的调试按钮控制JS的执行。 | 6606 6607**返回:** 6608 6609返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6610 6611JSVM_GENERIC_FAILURE 表示有未知的原因导致执行失败。 6612 6613 6614### OH_JSVM_Wrap() 6615 6616``` 6617JSVM_EXTERN JSVM_Status OH_JSVM_Wrap (JSVM_Env env, JSVM_Value jsObject, void * nativeObject, JSVM_Finalize finalizeCb, void * finalizeHint, JSVM_Ref * result ) 6618``` 6619 6620**描述** 6621 6622在JavaScript对象中封装native实例。native实例 后续可以通过OH_JSVM_Unwrap()进行检索。 6623 6624**起始版本:** 11 6625 6626**参数:** 6627 6628| 名称 | 描述 | 6629| -------- | -------- | 6630| env | 调用JSVM-API的环境。 | 6631| jsObject | 将成为原生对象封装器的JavaScript对象。 | 6632| nativeObject | 将封装在JavaScript对象中的native实例。 | 6633| finalizeCb | 可选的原生回调,可用于在 JavaScript 对象被垃圾回收时释放native实例。 | 6634| finalizeHint | 传递给完成回调的可选上下文提示。 | 6635| result | 对封装对象的可选引用。 | 6636 6637**返回:** 6638 6639返回执行状态码 JSVM_Status。 JSVM_OK 表示执行成功。 6640 6641JSVM_INVALID_ARG 表示传入的参数不合法。 6642