• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 使用JSVM-API判断给定的两个JS value是否严格相等
2
3## 简介
4
5JSVM-API中用于判断给定的两个JavaScript值是否严格相等,类似于JavaScript中的===操作符。使用这个函数可以避免类型转换和松散相等性比较,确保两个值不仅在值上相等,而且在类型上也相等。
6
7## 基本概念
8
9比较两个JavaScript值是否严格相等。严格相等比较不会进行类型转换,它要求两个值的类型和值完全相同才会返回true。
10
11## 接口说明
12
13| 接口                       | 功能说明                            |
14|----------------------------|-------------------------------------|
15| OH_JSVM_StrictEquals         | 判断两个JSVM_Value对象是否相等 |
16
17## 使用示例
18
19JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅对接口对应C++及ArkTS相关代码进行展示。
20
21### OH_JSVM_StrictEquals
22
23判断给定的两个JS value是否严格相等。
24
25cpp部分代码
26
27```cpp
28// hello.cpp
29#include "napi/native_api.h"
30#include "ark_runtime/jsvm.h"
31#include <hilog/log.h>
32// IsStrictEquals注册回调
33static JSVM_CallbackStruct param[] = {
34    {.data = nullptr, .callback = IsStrictEquals},
35};
36static JSVM_CallbackStruct *method = param;
37// IsStrictEquals方法别名,供JS调用
38static JSVM_PropertyDescriptor descriptor[] = {
39    {"isStrictEquals", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
40};
41// OH_JSVM_StrictEquals的样例方法
42static JSVM_Value IsStrictEquals(JSVM_Env env, JSVM_CallbackInfo info)
43{
44    // 接受两个入参
45    size_t argc = 2;
46    JSVM_Value args[2] = {nullptr};
47    OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
48    // 调用OH_JSVM_StrictEquals接口判断给定的两个JavaScript value是否严格相等
49    bool result = false;
50    JSVM_Status status = OH_JSVM_StrictEquals(env, args[0], args[1], &result);
51    if (status != JSVM_OK) {
52        OH_LOG_ERROR(LOG_APP, "JSVM OH_JSVM_StrictEquals: failed");
53    } else {
54        OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_StrictEquals: success: %{public}d", result);
55    }
56    JSVM_Value isStrictEqual;
57    OH_JSVM_GetBoolean(env, result, &isStrictEqual);
58    return isStrictEqual;
59}
60```
61
62ArkTS侧示例代码
63
64```ts
65let script: string = `
66    let data = '123';
67    let value = 123;
68    isStrictEquals(data,value);
69`;
70try {
71  let result = napitest.runJsVm(script);
72  hilog.info(0x0000, 'JSVM', 'isStrictEquals: %{public}s', result);
73} catch (error) {
74  hilog.error(0x0000, 'JSVM', 'isStrictEquals: %{public}s', error.message);
75}
76```
77