• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 使用JSVM-API判断给定的两个JS value是否严格相等
2<!--Kit: NDK Development-->
3<!--Subsystem: arkcompiler-->
4<!--Owner: @yuanxiaogou; @string_sz-->
5<!--Designer: @knightaoko-->
6<!--Tester: @test_lzz-->
7<!--Adviser: @fang-jinxu-->
8
9## 简介
10
11JSVM-API 中的函数用于判断两个 JavaScript 值是否严格相等,类似于 JavaScript 中的 `===` 操作符。该函数避免类型转换和松散相等性比较,确保值和类型均相等。
12
13## 基本概念
14
15比较两个JavaScript值是否严格相等。严格相等比较不会进行类型转换,它要求两个值的类型和值完全相同才会返回true。
16
17## 接口说明
18
19| 接口                       | 功能说明                            |
20|----------------------------|-------------------------------------|
21| OH_JSVM_StrictEquals         | 判断两个JSVM_Value对象是否相等 |
22
23## 使用示例
24
25JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅对接口对应C++相关代码进行展示。
26
27### OH_JSVM_StrictEquals
28
29判断给定的两个JS value是否严格相等。
30
31cpp部分代码:
32
33```cpp
34// hello.cpp
35#include "napi/native_api.h"
36#include "ark_runtime/jsvm.h"
37#include <hilog/log.h>
38// OH_JSVM_StrictEquals的样例方法
39static JSVM_Value IsStrictEquals(JSVM_Env env, JSVM_CallbackInfo info)
40{
41    // 接受两个入参
42    size_t argc = 2;
43    JSVM_Value args[2] = {nullptr};
44    OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
45    // 调用OH_JSVM_StrictEquals接口判断给定的两个JavaScript value是否严格相等
46    bool result = false;
47    JSVM_Status status = OH_JSVM_StrictEquals(env, args[0], args[1], &result);
48    if (status != JSVM_OK) {
49        OH_LOG_ERROR(LOG_APP, "JSVM OH_JSVM_StrictEquals: failed");
50    } else {
51        OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_StrictEquals: success: %{public}d", result);
52    }
53    JSVM_Value isStrictEqual = nullptr;
54    OH_JSVM_GetBoolean(env, result, &isStrictEqual);
55    return isStrictEqual;
56}
57// IsStrictEquals注册回调
58static JSVM_CallbackStruct param[] = {
59    {.data = nullptr, .callback = IsStrictEquals},
60};
61static JSVM_CallbackStruct *method = param;
62// IsStrictEquals方法别名,供JS调用
63static JSVM_PropertyDescriptor descriptor[] = {
64    {"isStrictEquals", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
65};
66// 样例测试js
67const char* srcCallNative = R"JS(data = '123';value = '123';isStrictEquals(data,value);)JS";
68```
69<!-- @[oh_jsvm_strict_equals](https://gitcode.com/openharmony/applications_app_samples/blob/master/code/DocsSample/ArkTS/JSVMAPI/JsvmUsageGuide/UsageInstructionsTwo/strictequals/src/main/cpp/hello.cpp) -->
70
71预期的输出结果:
72
73```ts
74JSVM OH_JSVM_StrictEquals: success: 1
75```
76