1e41f4b71Sopenharmony_ci# Working with Primitives Using Node-API
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci## Introduction
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ciNode-API provides APIs for converting data between C/C++ and ArkTS data types and obtaining the ArkTS objects in specified format.
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Basic Concepts
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciBefore using Node-API to operate ArkTS objects, you need to understand the following basic concepts:
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci- Conversion between ArkTS and C/C primitives: You can use Node-API to convert ArkTS values to C/C++ data types, for example, convert an ArkTS value into a C/C++ integer and convert an ArkTS string into a C/C++ string array. You can also convert C/C++ data into an ArkTS value and return the ArkTS value to ArkTS.
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci## Available APIs
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ciThe following table lists the APIs for converting data between ArkTS and C/C++ types.
16e41f4b71Sopenharmony_ci| API| Description|
17e41f4b71Sopenharmony_ci| -------- | -------- |
18e41f4b71Sopenharmony_ci| napi_coerce_to_bool | Forcibly converts an ArkTS value to an ArkTS Boolean value.|
19e41f4b71Sopenharmony_ci| napi_coerce_to_number | Forcibly converts an ArkTS value to an ArkTS number.|
20e41f4b71Sopenharmony_ci| napi_coerce_to_object | Forcibly converts an ArkTS value to an ArkTS object.|
21e41f4b71Sopenharmony_ci| napi_coerce_to_string | Forcibly converts an ArkTS value to an ArkTS string.|
22e41f4b71Sopenharmony_ci| napi_get_boolean | Obtains the ArkTS Boolean value based on the given C Boolean value.|
23e41f4b71Sopenharmony_ci| napi_get_value_bool | Obtains the C/C++ equivalent of the given ArkTS Boolean value.|
24e41f4b71Sopenharmony_ci| napi_get_global | Obtains an ArkTS global object so that it can be accessed and manipulated in C/C++.|
25e41f4b71Sopenharmony_ci| napi_get_null | Obtains the ArkTS **null**.|
26e41f4b71Sopenharmony_ci| napi_get_undefined | Obtains the ArkTS **undefined**.|
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci## Example
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ciIf you are just starting out with Node-API, see [Node-API Development Process](use-napi-process.md). The following demonstrates only the C++ and ArkTS code involved in the primitive-related APIs.
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci### napi_coerce_to_bool
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ciUse **napi_coerce_to_bool** to forcibly convert an ArkTS value to an ArkTS Boolean value.
35e41f4b71Sopenharmony_ci
36e41f4b71Sopenharmony_ciCPP code:
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci```cpp
39e41f4b71Sopenharmony_ci#include "napi/native_api.h"
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_cistatic napi_value CoerceToBool(napi_env env, napi_callback_info info)
42e41f4b71Sopenharmony_ci{
43e41f4b71Sopenharmony_ci    // Obtain and parse the parameters passed in.
44e41f4b71Sopenharmony_ci    size_t argc = 1;
45e41f4b71Sopenharmony_ci    napi_value args[1] = {nullptr};
46e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
47e41f4b71Sopenharmony_ci    // Convert the input value to a Boolean value.
48e41f4b71Sopenharmony_ci    napi_value result = nullptr;
49e41f4b71Sopenharmony_ci    napi_coerce_to_bool(env, args[0], &result);
50e41f4b71Sopenharmony_ci    // Return the ArkTS boolean value.
51e41f4b71Sopenharmony_ci    return result;
52e41f4b71Sopenharmony_ci}
53e41f4b71Sopenharmony_ci```
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ciAPI declaration:
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci```ts
58e41f4b71Sopenharmony_ci// index.d.ts
59e41f4b71Sopenharmony_ciexport const coerceToBool: <T>(data: T) => boolean;
60e41f4b71Sopenharmony_ci```
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ciArkTS code:
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci```ts
65e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
66e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_cilet value = testNapi.coerceToBool<number>(0);
69e41f4b71Sopenharmony_cilet str = testNapi.coerceToBool<string>('111111111');
70e41f4b71Sopenharmony_cilet obj = new Object();
71e41f4b71Sopenharmony_cilet res = testNapi.coerceToBool<Object>(obj);
72e41f4b71Sopenharmony_cilet result = testNapi.coerceToBool<null>(null);
73e41f4b71Sopenharmony_ci// false
74e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_bool:%{public}s', value);
75e41f4b71Sopenharmony_ci// true
76e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_bool:%{public}s', str);
77e41f4b71Sopenharmony_ci// true
78e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_bool:%{public}s', res);
79e41f4b71Sopenharmony_ci// false
80e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_bool:%{public}s', result);
81e41f4b71Sopenharmony_ci```
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci### napi_coerce_to_number
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ciUse **napi_coerce_to_number** to forcibly convert an ArkTS value to an ArkTS number.
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ciCPP code:
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ci```cpp
90e41f4b71Sopenharmony_ci#include "napi/native_api.h"
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_cistatic napi_value CoerceToNumber(napi_env env, napi_callback_info info)
93e41f4b71Sopenharmony_ci{
94e41f4b71Sopenharmony_ci    // Obtain and parse the parameters passed in.
95e41f4b71Sopenharmony_ci    size_t argc = 1;
96e41f4b71Sopenharmony_ci    napi_value args[1] = {nullptr};
97e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
98e41f4b71Sopenharmony_ci    // Convert the input value to a number.
99e41f4b71Sopenharmony_ci    napi_value result = nullptr;
100e41f4b71Sopenharmony_ci    napi_coerce_to_number(env, args[0], &result);
101e41f4b71Sopenharmony_ci    return result;
102e41f4b71Sopenharmony_ci}
103e41f4b71Sopenharmony_ci```
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ciAPI declaration:
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci```ts
108e41f4b71Sopenharmony_ci// index.d.ts
109e41f4b71Sopenharmony_ciexport const coerceToNumber: <T>(data: T) => number;
110e41f4b71Sopenharmony_ci```
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ciArkTS code:
113e41f4b71Sopenharmony_ci
114e41f4b71Sopenharmony_ci```ts
115e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
116e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
117e41f4b71Sopenharmony_ci
118e41f4b71Sopenharmony_cilet value = testNapi.coerceToNumber<string>('2556');
119e41f4b71Sopenharmony_cilet str = testNapi.coerceToNumber<string>('sssss');
120e41f4b71Sopenharmony_cilet bool = testNapi.coerceToNumber<boolean>(true);
121e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_number:%{public}d', value);
122e41f4b71Sopenharmony_ci// Not-a-Number (NaN) is returned since 'sssss' is not a valid number.
123e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_number:%{public}d', str);
124e41f4b71Sopenharmony_ci// The boolean value true is converted into 1.
125e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_number:%{public}d', bool);
126e41f4b71Sopenharmony_ci```
127e41f4b71Sopenharmony_ci
128e41f4b71Sopenharmony_ci### napi_coerce_to_object
129e41f4b71Sopenharmony_ci
130e41f4b71Sopenharmony_ciUse **napi_coerce_to_object** to forcibly convert an ArkTS value to an ArkTS object.
131e41f4b71Sopenharmony_ci
132e41f4b71Sopenharmony_ciCPP code:
133e41f4b71Sopenharmony_ci
134e41f4b71Sopenharmony_ci```cpp
135e41f4b71Sopenharmony_ci#include "napi/native_api.h"
136e41f4b71Sopenharmony_ci
137e41f4b71Sopenharmony_cistatic napi_value CoerceToObject(napi_env env, napi_callback_info info)
138e41f4b71Sopenharmony_ci{
139e41f4b71Sopenharmony_ci    // Obtain and parse the parameters passed in.
140e41f4b71Sopenharmony_ci    size_t argc = 1;
141e41f4b71Sopenharmony_ci    napi_value args[1] = {nullptr};
142e41f4b71Sopenharmony_ci    napi_value obj = nullptr;
143e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
144e41f4b71Sopenharmony_ci    // Convert the input value to an object.
145e41f4b71Sopenharmony_ci    napi_coerce_to_object(env, args[0], &obj);
146e41f4b71Sopenharmony_ci    return obj;
147e41f4b71Sopenharmony_ci}
148e41f4b71Sopenharmony_ci```
149e41f4b71Sopenharmony_ci
150e41f4b71Sopenharmony_ciAPI declaration:
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ci```ts
153e41f4b71Sopenharmony_ci// index.d.ts
154e41f4b71Sopenharmony_ciexport const coerceToObject: <T>(data: T) => Object;
155e41f4b71Sopenharmony_ci```
156e41f4b71Sopenharmony_ci
157e41f4b71Sopenharmony_ciArkTS code:
158e41f4b71Sopenharmony_ci
159e41f4b71Sopenharmony_ci```ts
160e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
161e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_cilet value = testNapi.coerceToObject<string>('222222');
164e41f4b71Sopenharmony_cilet result = testNapi.coerceToObject<number>(111);
165e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Node-API coerceToObject:%{public}s.', typeof result);
166e41f4b71Sopenharmony_ciif (typeof value === 'object') {
167e41f4b71Sopenharmony_ci  hilog.info(0x0000, 'testTag', 'Node-API The value is an object.');
168e41f4b71Sopenharmony_ci} else {
169e41f4b71Sopenharmony_ci  hilog.info(0x0000, 'testTag', 'Node-API The value is not an object.');
170e41f4b71Sopenharmony_ci}
171e41f4b71Sopenharmony_ci```
172e41f4b71Sopenharmony_ci
173e41f4b71Sopenharmony_ci### napi_coerce_to_string
174e41f4b71Sopenharmony_ci
175e41f4b71Sopenharmony_ciUse **napi_coerce_to_string** to forcibly convert an ArkTS value to an ArkTS string.
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_ciCPP code:
178e41f4b71Sopenharmony_ci
179e41f4b71Sopenharmony_ci```cpp
180e41f4b71Sopenharmony_ci#include "napi/native_api.h"
181e41f4b71Sopenharmony_ci
182e41f4b71Sopenharmony_cistatic napi_value CoerceToString(napi_env env, napi_callback_info info)
183e41f4b71Sopenharmony_ci{
184e41f4b71Sopenharmony_ci    // Obtain and parse the parameters passed in.
185e41f4b71Sopenharmony_ci    size_t argc = 1;
186e41f4b71Sopenharmony_ci    napi_value args[1] = {nullptr};
187e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
188e41f4b71Sopenharmony_ci    // Convert the input value to a string.
189e41f4b71Sopenharmony_ci    napi_value str = nullptr;
190e41f4b71Sopenharmony_ci    napi_coerce_to_string(env, args[0], &str);
191e41f4b71Sopenharmony_ci    return str;
192e41f4b71Sopenharmony_ci}
193e41f4b71Sopenharmony_ci```
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ciAPI declaration:
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ci```ts
198e41f4b71Sopenharmony_ci// index.d.ts
199e41f4b71Sopenharmony_ciexport const coerceToString: <T>(data: T) => string;
200e41f4b71Sopenharmony_ci```
201e41f4b71Sopenharmony_ci
202e41f4b71Sopenharmony_ciArkTS code:
203e41f4b71Sopenharmony_ci
204e41f4b71Sopenharmony_ci```ts
205e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
206e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_cilet value = testNapi.coerceToString<number>(212);
209e41f4b71Sopenharmony_cilet obj = new Object();
210e41f4b71Sopenharmony_cilet res = testNapi.coerceToString<Object>(obj);
211e41f4b71Sopenharmony_cilet bool = testNapi.coerceToString<boolean>(false);
212e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_string:%{public}s', value);
213e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_string:%{public}s', typeof res);
214e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_coerce_to_string:%{public}s', bool);
215e41f4b71Sopenharmony_ci```
216e41f4b71Sopenharmony_ci
217e41f4b71Sopenharmony_ci### napi_get_boolean
218e41f4b71Sopenharmony_ci
219e41f4b71Sopenharmony_ciUse **napi_get_boolean** to obtain the ArkTS Boolean value based on the given C Boolean value.
220e41f4b71Sopenharmony_ci
221e41f4b71Sopenharmony_ciCPP code:
222e41f4b71Sopenharmony_ci
223e41f4b71Sopenharmony_ci```cpp
224e41f4b71Sopenharmony_ci#include "napi/native_api.h"
225e41f4b71Sopenharmony_ci
226e41f4b71Sopenharmony_cistatic napi_value GetBoolean(napi_env env, napi_callback_info info)
227e41f4b71Sopenharmony_ci{
228e41f4b71Sopenharmony_ci    // Pass in two parameters and parse them.
229e41f4b71Sopenharmony_ci    size_t argc = 2;
230e41f4b71Sopenharmony_ci    napi_value argv[2];
231e41f4b71Sopenharmony_ci    napi_valuetype data, value;
232e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
233e41f4b71Sopenharmony_ci    // Check the types of the two parameters.
234e41f4b71Sopenharmony_ci    napi_typeof(env, argv[0], &data);
235e41f4b71Sopenharmony_ci    napi_typeof(env, argv[1], &value);
236e41f4b71Sopenharmony_ci
237e41f4b71Sopenharmony_ci    napi_value returnValue = nullptr;
238e41f4b71Sopenharmony_ci    // Check whether the types of the two parameters are the same and return the result via a Boolean value.
239e41f4b71Sopenharmony_ci    napi_get_boolean(env, data == value, &returnValue);
240e41f4b71Sopenharmony_ci    // Return the result.
241e41f4b71Sopenharmony_ci    return returnValue;
242e41f4b71Sopenharmony_ci}
243e41f4b71Sopenharmony_ci```
244e41f4b71Sopenharmony_ci
245e41f4b71Sopenharmony_ciAPI declaration:
246e41f4b71Sopenharmony_ci
247e41f4b71Sopenharmony_ci```ts
248e41f4b71Sopenharmony_ci// index.d.ts
249e41f4b71Sopenharmony_ciexport const getBoolean: <T>(data: T, value: String) => boolean;
250e41f4b71Sopenharmony_ci```
251e41f4b71Sopenharmony_ci
252e41f4b71Sopenharmony_ciArkTS code:
253e41f4b71Sopenharmony_ci
254e41f4b71Sopenharmony_ci```ts
255e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
256e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
257e41f4b71Sopenharmony_ci
258e41f4b71Sopenharmony_cilet value = testNapi.getBoolean<number>(1, '1');
259e41f4b71Sopenharmony_cilet data = testNapi.getBoolean<string>('sss', '1');
260e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_get_boolean:%{public}s', value);
261e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_get_boolean:%{public}s', data);
262e41f4b71Sopenharmony_ci```
263e41f4b71Sopenharmony_ci
264e41f4b71Sopenharmony_ci### napi_get_value_bool
265e41f4b71Sopenharmony_ci
266e41f4b71Sopenharmony_ciUse **napi_get_value_bool** to obtain the C Boolean equivalent of an ArkTS Boolean value.
267e41f4b71Sopenharmony_ci
268e41f4b71Sopenharmony_ciCPP code:
269e41f4b71Sopenharmony_ci
270e41f4b71Sopenharmony_ci```cpp
271e41f4b71Sopenharmony_ci#include "napi/native_api.h"
272e41f4b71Sopenharmony_ci
273e41f4b71Sopenharmony_cistatic napi_value GetValueBool(napi_env env, napi_callback_info info)
274e41f4b71Sopenharmony_ci{
275e41f4b71Sopenharmony_ci    size_t argc = 1;
276e41f4b71Sopenharmony_ci    napi_value args[1] = {nullptr};
277e41f4b71Sopenharmony_ci
278e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
279e41f4b71Sopenharmony_ci    bool bool_c = false;
280e41f4b71Sopenharmony_ci    napi_status status = napi_get_value_bool(env, args[0], &bool_c);
281e41f4b71Sopenharmony_ci    if (status == napi_boolean_expected) {
282e41f4b71Sopenharmony_ci        // If napi_get_value_bool is successful, napi_ok is returned. If a non-Boolean value is passed in, napi_boolean_expected is returned.
283e41f4b71Sopenharmony_ci        return nullptr;
284e41f4b71Sopenharmony_ci    }
285e41f4b71Sopenharmony_ci    napi_value boolNapi = nullptr;
286e41f4b71Sopenharmony_ci    napi_get_boolean(env, bool_c, &boolNapi);
287e41f4b71Sopenharmony_ci    return boolNapi;
288e41f4b71Sopenharmony_ci}
289e41f4b71Sopenharmony_ci```
290e41f4b71Sopenharmony_ci
291e41f4b71Sopenharmony_ciAPI declaration:
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci```ts
294e41f4b71Sopenharmony_ci// index.d.ts
295e41f4b71Sopenharmony_ciexport const getValueBool: (value: boolean | string) => boolean | void;
296e41f4b71Sopenharmony_ci```
297e41f4b71Sopenharmony_ci
298e41f4b71Sopenharmony_ciArkTS code:
299e41f4b71Sopenharmony_ci
300e41f4b71Sopenharmony_ci```ts
301e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
302e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
303e41f4b71Sopenharmony_ci
304e41f4b71Sopenharmony_ci// Pass in a Boolean value and a non-Boolean value. After the Boolean value is passed in, the Boolean value is returned. After the non-Boolean value is passed in, undefined is returned.
305e41f4b71Sopenharmony_cihilog.info(0x0000, 'Node-API', 'get_value_bool_not_bool %{public}s', testNapi.getValueBool ('Hello 123'));
306e41f4b71Sopenharmony_cihilog.info(0x0000, 'Node-API', 'get_value_bool_true %{public}s', testNapi.getValueBool(true));
307e41f4b71Sopenharmony_cihilog.info(0x0000, 'Node-API', 'get_value_bool_false %{public}s', testNapi.getValueBool(false));
308e41f4b71Sopenharmony_ci```
309e41f4b71Sopenharmony_ci
310e41f4b71Sopenharmony_ci### napi_get_global
311e41f4b71Sopenharmony_ci
312e41f4b71Sopenharmony_ciUse **napi_get_global** to obtain an ArkTS global object. You can use this API to obtain the **napi_value** that represents an ArkTS global object, so that the global object of the ArkTS runtime can be called by C/C++.
313e41f4b71Sopenharmony_ci
314e41f4b71Sopenharmony_ciCPP code:
315e41f4b71Sopenharmony_ci
316e41f4b71Sopenharmony_ci```cpp
317e41f4b71Sopenharmony_ci#include "napi/native_api.h"
318e41f4b71Sopenharmony_ci
319e41f4b71Sopenharmony_cistatic napi_value GetGlobal(napi_env env, napi_callback_info info)
320e41f4b71Sopenharmony_ci{
321e41f4b71Sopenharmony_ci    napi_value global = nullptr;
322e41f4b71Sopenharmony_ci    // Obtains a global object.
323e41f4b71Sopenharmony_ci    napi_get_global(env, &global);
324e41f4b71Sopenharmony_ci    return global;
325e41f4b71Sopenharmony_ci}
326e41f4b71Sopenharmony_ci```
327e41f4b71Sopenharmony_ci
328e41f4b71Sopenharmony_ciAPI declaration:
329e41f4b71Sopenharmony_ci
330e41f4b71Sopenharmony_ci```ts
331e41f4b71Sopenharmony_ci// index.d.ts
332e41f4b71Sopenharmony_ciexport const getGlobal: () => Object;
333e41f4b71Sopenharmony_ci```
334e41f4b71Sopenharmony_ci
335e41f4b71Sopenharmony_ciArkTS code:
336e41f4b71Sopenharmony_ci
337e41f4b71Sopenharmony_ci```ts
338e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
339e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
340e41f4b71Sopenharmony_ci
341e41f4b71Sopenharmony_cilet globalObj = testNapi.getGlobal();
342e41f4b71Sopenharmony_ci// Check whether the obtained global object has its own properties.
343e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_get_global:%{public}s', globalObj.hasOwnProperty!("undefined"));
344e41f4b71Sopenharmony_ci```
345e41f4b71Sopenharmony_ci
346e41f4b71Sopenharmony_ci### napi_get_null
347e41f4b71Sopenharmony_ci
348e41f4b71Sopenharmony_ciUse **napi_get_null** to obtains **null** in ArkTS.
349e41f4b71Sopenharmony_ci
350e41f4b71Sopenharmony_ciCPP code:
351e41f4b71Sopenharmony_ci
352e41f4b71Sopenharmony_ci```cpp
353e41f4b71Sopenharmony_ci#include "napi/native_api.h"
354e41f4b71Sopenharmony_ci
355e41f4b71Sopenharmony_cistatic napi_value GetNull(napi_env env, napi_callback_info info)
356e41f4b71Sopenharmony_ci{
357e41f4b71Sopenharmony_ci    napi_value nullValue = nullptr;
358e41f4b71Sopenharmony_ci    napi_get_null(env, &nullValue);
359e41f4b71Sopenharmony_ci    return nullValue;
360e41f4b71Sopenharmony_ci}
361e41f4b71Sopenharmony_ci```
362e41f4b71Sopenharmony_ci
363e41f4b71Sopenharmony_ciAPI declaration:
364e41f4b71Sopenharmony_ci
365e41f4b71Sopenharmony_ci```ts
366e41f4b71Sopenharmony_ci// index.d.ts
367e41f4b71Sopenharmony_ciexport const getNull: () => null;
368e41f4b71Sopenharmony_ci```
369e41f4b71Sopenharmony_ci
370e41f4b71Sopenharmony_ciArkTS code:
371e41f4b71Sopenharmony_ci
372e41f4b71Sopenharmony_ci```ts
373e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
374e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
375e41f4b71Sopenharmony_ci
376e41f4b71Sopenharmony_cilet value = testNapi.getNull();
377e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_get_null:%{public}s', value);
378e41f4b71Sopenharmony_ci```
379e41f4b71Sopenharmony_ci
380e41f4b71Sopenharmony_ci### napi_get_undefined
381e41f4b71Sopenharmony_ci
382e41f4b71Sopenharmony_ciUse **napi_get_undefined** to obtain **undefined** in ArkTS.
383e41f4b71Sopenharmony_ci
384e41f4b71Sopenharmony_ciCPP code:
385e41f4b71Sopenharmony_ci
386e41f4b71Sopenharmony_ci```cpp
387e41f4b71Sopenharmony_ci#include "napi/native_api.h"
388e41f4b71Sopenharmony_ci
389e41f4b71Sopenharmony_cistatic napi_value GetUndefined(napi_env env, napi_callback_info info)
390e41f4b71Sopenharmony_ci{
391e41f4b71Sopenharmony_ci    // Obtain and parse the parameters passed in.
392e41f4b71Sopenharmony_ci    size_t argc = 1;
393e41f4b71Sopenharmony_ci    napi_value args[1] = {nullptr};
394e41f4b71Sopenharmony_ci    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
395e41f4b71Sopenharmony_ci
396e41f4b71Sopenharmony_ci    napi_value value = nullptr;
397e41f4b71Sopenharmony_ci    napi_get_undefined(env, &value);
398e41f4b71Sopenharmony_ci    // Check whether the input parameter is equal to the ArkTS 'undefined' in both the type and value.
399e41f4b71Sopenharmony_ci    bool isEqual = false;
400e41f4b71Sopenharmony_ci    napi_strict_equals(env, args[0], value, &isEqual);
401e41f4b71Sopenharmony_ci    // Return a value based on the strict equality check.
402e41f4b71Sopenharmony_ci    napi_value result = nullptr;
403e41f4b71Sopenharmony_ci    // Return true if the two parameters are equal, return false otherwise.
404e41f4b71Sopenharmony_ci    napi_get_boolean(env, isEqual, &result);
405e41f4b71Sopenharmony_ci    return result;
406e41f4b71Sopenharmony_ci}
407e41f4b71Sopenharmony_ci```
408e41f4b71Sopenharmony_ci
409e41f4b71Sopenharmony_ciAPI declaration:
410e41f4b71Sopenharmony_ci
411e41f4b71Sopenharmony_ci```ts
412e41f4b71Sopenharmony_ci// index.d.ts
413e41f4b71Sopenharmony_ciexport const getUndefined: (value: undefined) => boolean;
414e41f4b71Sopenharmony_ci```
415e41f4b71Sopenharmony_ci
416e41f4b71Sopenharmony_ciArkTS code:
417e41f4b71Sopenharmony_ci
418e41f4b71Sopenharmony_ci```ts
419e41f4b71Sopenharmony_ciimport hilog from '@ohos.hilog'
420e41f4b71Sopenharmony_ciimport testNapi from 'libentry.so'
421e41f4b71Sopenharmony_ci
422e41f4b71Sopenharmony_cilet data: undefined = undefined;
423e41f4b71Sopenharmony_cilet value = testNapi.getUndefined(data);
424e41f4b71Sopenharmony_cihilog.info(0x0000, 'testTag', 'Test Node-API napi_get_undefined:%{public}s', value);
425e41f4b71Sopenharmony_ci```
426e41f4b71Sopenharmony_ci
427e41f4b71Sopenharmony_ciTo print logs in the native CPP, add the following information to the **CMakeLists.txt** file and add the header file by using **#include "hilog/log.h"**.
428e41f4b71Sopenharmony_ci
429e41f4b71Sopenharmony_ci```text
430e41f4b71Sopenharmony_ci// CMakeLists.txt
431e41f4b71Sopenharmony_ciadd_definitions( "-DLOG_DOMAIN=0xd0d0" )
432e41f4b71Sopenharmony_ciadd_definitions( "-DLOG_TAG=\"testTag\"" )
433e41f4b71Sopenharmony_citarget_link_libraries(entry PUBLIC libhilog_ndk.z.so)
434e41f4b71Sopenharmony_ci```
435