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