1e41f4b71Sopenharmony_ci# Comparing JS Values Using JSVM-API
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci## Introduction
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ciThis topic walks you through on how to use JSVM-API to check whether two JavaScript (JS) values are strictly equal (equal in both value and type). The API provided is equivalent to the JS strict equality operator (===).
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Basic Concepts
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciStrictly equal: If two values are strictly equal, they are equal in both value and type. When type conversion is considered, if the values being compared are of different types, **false** will be returned even if the values are the same.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci## Available APIs
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci| API                      | Description                           |
14e41f4b71Sopenharmony_ci|----------------------------|-------------------------------------|
15e41f4b71Sopenharmony_ci| OH_JSVM_StrictEquals         | Checks whether two **JSVM_Value** objects are strictly equal. |
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci## Example
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ciIf you are just starting out with JSVM-API, see [JSVM-API Development Process](use-jsvm-process.md). The following demonstrates only the C++ and ArkTS code related to the comparison.
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci### OH_JSVM_StrictEquals
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ciUse **OH_JSVM_StrictEquals** to check whether two JS values are strictly equal.
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ciCPP code:
26e41f4b71Sopenharmony_ci
27e41f4b71Sopenharmony_ci```cpp
28e41f4b71Sopenharmony_ci// hello.cpp
29e41f4b71Sopenharmony_ci#include "napi/native_api.h"
30e41f4b71Sopenharmony_ci#include "ark_runtime/jsvm.h"
31e41f4b71Sopenharmony_ci#include <hilog/log.h>
32e41f4b71Sopenharmony_ci// Register the IsStrictEquals callback.
33e41f4b71Sopenharmony_cistatic JSVM_CallbackStruct param[] = {
34e41f4b71Sopenharmony_ci    {.data = nullptr, .callback = IsStrictEquals},
35e41f4b71Sopenharmony_ci};
36e41f4b71Sopenharmony_cistatic JSVM_CallbackStruct *method = param;
37e41f4b71Sopenharmony_ci// Set a property descriptor named isStrictEquals and associate it with a callback. This allows the isStrictEquals callback to be called from JS.
38e41f4b71Sopenharmony_cistatic JSVM_PropertyDescriptor descriptor[] = {
39e41f4b71Sopenharmony_ci    {"isStrictEquals", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
40e41f4b71Sopenharmony_ci};
41e41f4b71Sopenharmony_ci// Define OH_JSVM_StrictEquals.
42e41f4b71Sopenharmony_cistatic JSVM_Value IsStrictEquals(JSVM_Env env, JSVM_CallbackInfo info)
43e41f4b71Sopenharmony_ci{
44e41f4b71Sopenharmony_ci    // Obtain the input parameters.
45e41f4b71Sopenharmony_ci    size_t argc = 2;
46e41f4b71Sopenharmony_ci    JSVM_Value args[2] = {nullptr};
47e41f4b71Sopenharmony_ci    OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
48e41f4b71Sopenharmony_ci    // Call OH_JSVM_StrictEquals to check whether two given JS values are strictly equal.
49e41f4b71Sopenharmony_ci    bool result = false;
50e41f4b71Sopenharmony_ci    JSVM_Status status = OH_JSVM_StrictEquals(env, args[0], args[1], &result);
51e41f4b71Sopenharmony_ci    if (status != JSVM_OK) {
52e41f4b71Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "JSVM OH_JSVM_StrictEquals: failed");
53e41f4b71Sopenharmony_ci    } else {
54e41f4b71Sopenharmony_ci        OH_LOG_INFO(LOG_APP, "JSVM OH_JSVM_StrictEquals: success: %{public}d", result);
55e41f4b71Sopenharmony_ci    }
56e41f4b71Sopenharmony_ci    JSVM_Value isStrictEqual;
57e41f4b71Sopenharmony_ci    OH_JSVM_GetBoolean(env, result, &isStrictEqual);
58e41f4b71Sopenharmony_ci    return isStrictEqual;
59e41f4b71Sopenharmony_ci}
60e41f4b71Sopenharmony_ci```
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ciArkTS code:
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci```ts
65e41f4b71Sopenharmony_cilet script: string = `
66e41f4b71Sopenharmony_ci    let data = '123';
67e41f4b71Sopenharmony_ci    let value = 123;
68e41f4b71Sopenharmony_ci    isStrictEquals(data,value);
69e41f4b71Sopenharmony_ci`;
70e41f4b71Sopenharmony_citry {
71e41f4b71Sopenharmony_ci  let result = napitest.runJsVm(script);
72e41f4b71Sopenharmony_ci  hilog.info(0x0000, 'JSVM', 'isStrictEquals: %{public}s', result);
73e41f4b71Sopenharmony_ci} catch (error) {
74e41f4b71Sopenharmony_ci  hilog.error(0x0000, 'JSVM', 'isStrictEquals: %{public}s', error.message);
75e41f4b71Sopenharmony_ci}
76e41f4b71Sopenharmony_ci```
77