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