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