18c339a94Sopenharmony_ci# Value 28c339a94Sopenharmony_ci 38c339a94Sopenharmony_ci`Napi::Value` is the C++ manifestation of a JavaScript value. It is the base 48c339a94Sopenharmony_ciclass upon which other JavaScript values such as `Napi::Number`, 58c339a94Sopenharmony_ci`Napi::Boolean`, `Napi::String`, and `Napi::Object` are based. It represents a 68c339a94Sopenharmony_ciJavaScript value of an unknown type. It is a thin wrapper around the Node-API 78c339a94Sopenharmony_cidatatype `napi_value`. Methods on this class can be used to check the JavaScript 88c339a94Sopenharmony_citype of the underlying Node-API `napi_value` and also to convert to C++ types. 98c339a94Sopenharmony_ci 108c339a94Sopenharmony_ci## Constructors 118c339a94Sopenharmony_ci 128c339a94Sopenharmony_ci### Empty Constructor 138c339a94Sopenharmony_ci 148c339a94Sopenharmony_ci```cpp 158c339a94Sopenharmony_ciNapi::Value::Value(); 168c339a94Sopenharmony_ci``` 178c339a94Sopenharmony_ci 188c339a94Sopenharmony_ciCreates a new *empty* `Napi::Value` instance. 198c339a94Sopenharmony_ci 208c339a94Sopenharmony_ci### Constructor 218c339a94Sopenharmony_ci 228c339a94Sopenharmony_ci```cpp 238c339a94Sopenharmony_ciNapi::Value::Value(napi_env env, napi_value value); 248c339a94Sopenharmony_ci``` 258c339a94Sopenharmony_ci 268c339a94Sopenharmony_ci- `[in] env`: The `napi_env` environment in which to construct the `Napi::Value` 278c339a94Sopenharmony_ciobject. 288c339a94Sopenharmony_ci- `[in] value`: The C++ primitive from which to instantiate the `Napi::Value`. 298c339a94Sopenharmony_civalue` may be any of: 308c339a94Sopenharmony_ci - `bool` 318c339a94Sopenharmony_ci - Any integer type 328c339a94Sopenharmony_ci - Any floating point type 338c339a94Sopenharmony_ci - `const char*` (encoded using UTF-8, null-terminated) 348c339a94Sopenharmony_ci - `const char16_t*` (encoded using UTF-16-LE, null-terminated) 358c339a94Sopenharmony_ci - `std::string` (encoded using UTF-8) 368c339a94Sopenharmony_ci - `std::u16string` 378c339a94Sopenharmony_ci - `Napi::Value` 388c339a94Sopenharmony_ci - `napi_value` 398c339a94Sopenharmony_ci 408c339a94Sopenharmony_ci## Operators 418c339a94Sopenharmony_ci 428c339a94Sopenharmony_ci### operator napi_value 438c339a94Sopenharmony_ci 448c339a94Sopenharmony_ci```cpp 458c339a94Sopenharmony_ciNapi::Value::operator napi_value() const; 468c339a94Sopenharmony_ci``` 478c339a94Sopenharmony_ci 488c339a94Sopenharmony_ciReturns the underlying Node-API `napi_value`. If the instance is _empty_, this 498c339a94Sopenharmony_cireturns `nullptr`. 508c339a94Sopenharmony_ci 518c339a94Sopenharmony_ci### operator == 528c339a94Sopenharmony_ci 538c339a94Sopenharmony_ci```cpp 548c339a94Sopenharmony_cibool Napi::Value::operator ==(const Napi::Value& other) const; 558c339a94Sopenharmony_ci``` 568c339a94Sopenharmony_ci 578c339a94Sopenharmony_ciReturns `true` if this value strictly equals another value, or `false` 588c339a94Sopenharmony_ciotherwise. 598c339a94Sopenharmony_ci 608c339a94Sopenharmony_ci### operator != 618c339a94Sopenharmony_ci 628c339a94Sopenharmony_ci```cpp 638c339a94Sopenharmony_cibool Napi::Value::operator !=(const Napi::Value& other) const; 648c339a94Sopenharmony_ci``` 658c339a94Sopenharmony_ci 668c339a94Sopenharmony_ciReturns `false` if this value strictly equals another value, or `true` 678c339a94Sopenharmony_ciotherwise. 688c339a94Sopenharmony_ci 698c339a94Sopenharmony_ci## Methods 708c339a94Sopenharmony_ci 718c339a94Sopenharmony_ci### As 728c339a94Sopenharmony_ci 738c339a94Sopenharmony_ci```cpp 748c339a94Sopenharmony_citemplate <typename T> T Napi::Value::As() const; 758c339a94Sopenharmony_ci``` 768c339a94Sopenharmony_ci 778c339a94Sopenharmony_ciCasts to another type of `Napi::Value`, when the actual type is known or 788c339a94Sopenharmony_ciassumed. 798c339a94Sopenharmony_ci 808c339a94Sopenharmony_ciThis conversion does not coerce the type. Calling any methods inappropriate for 818c339a94Sopenharmony_cithe actual value type will throw `Napi::Error`. When C++ exceptions are 828c339a94Sopenharmony_cidisabled, the thrown error will not be reflected before control returns to 838c339a94Sopenharmony_ciJavaScript. 848c339a94Sopenharmony_ci 858c339a94Sopenharmony_ciIn order to enforce expected type, use `Napi::Value::Is*()` methods to check 868c339a94Sopenharmony_cithe type before calling `Napi::Value::As()`, or compile with definition 878c339a94Sopenharmony_ci`NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS` to enforce type checks. 888c339a94Sopenharmony_ci 898c339a94Sopenharmony_ci### Env 908c339a94Sopenharmony_ci 918c339a94Sopenharmony_ci```cpp 928c339a94Sopenharmony_ciNapi::Env Napi::Value::Env() const; 938c339a94Sopenharmony_ci``` 948c339a94Sopenharmony_ci 958c339a94Sopenharmony_ciReturns the `Napi::Env` environment this value is associated with. See 968c339a94Sopenharmony_ci[`Napi::Env`](env.md) for more details about environments. 978c339a94Sopenharmony_ci 988c339a94Sopenharmony_ci### From 998c339a94Sopenharmony_ci 1008c339a94Sopenharmony_ci```cpp 1018c339a94Sopenharmony_citemplate <typename T> 1028c339a94Sopenharmony_cistatic Napi::Value Napi::Value::From(napi_env env, const T& value); 1038c339a94Sopenharmony_ci``` 1048c339a94Sopenharmony_ci 1058c339a94Sopenharmony_ci- `[in] env`: The `napi_env` environment in which to create the `Napi::Value` 1068c339a94Sopenharmony_ciobject. 1078c339a94Sopenharmony_ci- `[in] value`: The Node-API primitive value from which to create the `Napi::Value` 1088c339a94Sopenharmony_ciobject. 1098c339a94Sopenharmony_ci 1108c339a94Sopenharmony_ciReturns a `Napi::Value` object from an Node-API primitive value. 1118c339a94Sopenharmony_ci 1128c339a94Sopenharmony_ciThis method is used to convert from a C++ type to a JavaScript value. 1138c339a94Sopenharmony_ciHere, `value` may be any of: 1148c339a94Sopenharmony_ci- `bool` - returns a `Napi::Boolean`. 1158c339a94Sopenharmony_ci- Any integer type - returns a `Napi::Number`. 1168c339a94Sopenharmony_ci- Any floating point type - returns a `Napi::Number`. 1178c339a94Sopenharmony_ci- `const char*` (encoded using UTF-8, null-terminated) - returns a 1188c339a94Sopenharmony_ci`Napi::String`. 1198c339a94Sopenharmony_ci- `const char16_t*` (encoded using UTF-16-LE, null-terminated) - returns a 1208c339a94Sopenharmony_ci`Napi::String`. 1218c339a94Sopenharmony_ci- `std::string` (encoded using UTF-8) - returns a `Napi::String`. 1228c339a94Sopenharmony_ci- `std::u16string` - returns a `Napi::String`. 1238c339a94Sopenharmony_ci- `Napi::Value` - returns a `Napi::Value`. 1248c339a94Sopenharmony_ci- `Napi_value` - returns a `Napi::Value`. 1258c339a94Sopenharmony_ci 1268c339a94Sopenharmony_ci### IsArray 1278c339a94Sopenharmony_ci 1288c339a94Sopenharmony_ci```cpp 1298c339a94Sopenharmony_cibool Napi::Value::IsArray() const; 1308c339a94Sopenharmony_ci``` 1318c339a94Sopenharmony_ci 1328c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::Array` or `false` 1338c339a94Sopenharmony_ciotherwise. 1348c339a94Sopenharmony_ci 1358c339a94Sopenharmony_ci### IsArrayBuffer 1368c339a94Sopenharmony_ci 1378c339a94Sopenharmony_ci```cpp 1388c339a94Sopenharmony_cibool Napi::Value::IsArrayBuffer() const; 1398c339a94Sopenharmony_ci``` 1408c339a94Sopenharmony_ci 1418c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::ArrayBuffer` or 1428c339a94Sopenharmony_ci`false` otherwise. 1438c339a94Sopenharmony_ci 1448c339a94Sopenharmony_ci### IsBigInt 1458c339a94Sopenharmony_ci 1468c339a94Sopenharmony_ci```cpp 1478c339a94Sopenharmony_cibool Napi::Value::IsBigInt() const; 1488c339a94Sopenharmony_ci``` 1498c339a94Sopenharmony_ci 1508c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::BigInt` or `false` 1518c339a94Sopenharmony_ciotherwise. 1528c339a94Sopenharmony_ci 1538c339a94Sopenharmony_ci### IsBoolean 1548c339a94Sopenharmony_ci 1558c339a94Sopenharmony_ci```cpp 1568c339a94Sopenharmony_cibool Napi::Value::IsBoolean() const; 1578c339a94Sopenharmony_ci``` 1588c339a94Sopenharmony_ci 1598c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `true` or JavaScript 1608c339a94Sopenharmony_ci`false`, or `false` if the value is not a `Napi::Boolean` value in JavaScript. 1618c339a94Sopenharmony_ci 1628c339a94Sopenharmony_ci### IsBuffer 1638c339a94Sopenharmony_ci 1648c339a94Sopenharmony_ci```cpp 1658c339a94Sopenharmony_cibool Napi::Value::IsBuffer() const; 1668c339a94Sopenharmony_ci``` 1678c339a94Sopenharmony_ci 1688c339a94Sopenharmony_ciReturns `true` if the underlying value is a Node.js `Napi::Buffer` or `false` 1698c339a94Sopenharmony_ciotherwise. 1708c339a94Sopenharmony_ci 1718c339a94Sopenharmony_ci### IsDataView 1728c339a94Sopenharmony_ci```cpp 1738c339a94Sopenharmony_cibool Napi::Value::IsDataView() const; 1748c339a94Sopenharmony_ci``` 1758c339a94Sopenharmony_ci 1768c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::DataView` or 1778c339a94Sopenharmony_ci`false` otherwise. 1788c339a94Sopenharmony_ci 1798c339a94Sopenharmony_ci### IsDate 1808c339a94Sopenharmony_ci 1818c339a94Sopenharmony_ci```cpp 1828c339a94Sopenharmony_cibool Napi::Value::IsDate() const; 1838c339a94Sopenharmony_ci``` 1848c339a94Sopenharmony_ci 1858c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Date` or `false` 1868c339a94Sopenharmony_ciotherwise. 1878c339a94Sopenharmony_ci 1888c339a94Sopenharmony_ci### IsEmpty 1898c339a94Sopenharmony_ci 1908c339a94Sopenharmony_ci```cpp 1918c339a94Sopenharmony_cibool Napi::Value::IsEmpty() const; 1928c339a94Sopenharmony_ci``` 1938c339a94Sopenharmony_ci 1948c339a94Sopenharmony_ciReturns `true` if the value is uninitialized. 1958c339a94Sopenharmony_ci 1968c339a94Sopenharmony_ciAn empty `Napi::Value` is invalid, and most attempts to perform an operation on 1978c339a94Sopenharmony_cian empty `Napi::Value` will result in an exception. An empty `Napi::Value` is 1988c339a94Sopenharmony_cidistinct from JavaScript `null` or `undefined`, which are valid values. 1998c339a94Sopenharmony_ci 2008c339a94Sopenharmony_ciWhen C++ exceptions are disabled at compile time, a method with a `Napi::Value` 2018c339a94Sopenharmony_cireturn type may return an empty `Napi::Value` to indicate a pending exception. 2028c339a94Sopenharmony_ciThus, when C++ exceptions are not being used, callers should check the result of 2038c339a94Sopenharmony_ci`Env::IsExceptionPending` before attempting to use the value. 2048c339a94Sopenharmony_ci 2058c339a94Sopenharmony_ci### IsExternal 2068c339a94Sopenharmony_ci```cpp 2078c339a94Sopenharmony_cibool Napi::Value::IsExternal() const; 2088c339a94Sopenharmony_ci``` 2098c339a94Sopenharmony_ci 2108c339a94Sopenharmony_ciReturns `true` if the underlying value is a Node-API external object or `false` 2118c339a94Sopenharmony_ciotherwise. 2128c339a94Sopenharmony_ci 2138c339a94Sopenharmony_ci### IsFunction 2148c339a94Sopenharmony_ci 2158c339a94Sopenharmony_ci```cpp 2168c339a94Sopenharmony_cibool Napi::Value::IsFunction() const; 2178c339a94Sopenharmony_ci``` 2188c339a94Sopenharmony_ci 2198c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::Function` or 2208c339a94Sopenharmony_ci`false` otherwise. 2218c339a94Sopenharmony_ci 2228c339a94Sopenharmony_ci### IsNull 2238c339a94Sopenharmony_ci 2248c339a94Sopenharmony_ci```cpp 2258c339a94Sopenharmony_cibool Napi::Value::IsNull() const; 2268c339a94Sopenharmony_ci``` 2278c339a94Sopenharmony_ci 2288c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `null` or `false` 2298c339a94Sopenharmony_ciotherwise. 2308c339a94Sopenharmony_ci 2318c339a94Sopenharmony_ci### IsNumber 2328c339a94Sopenharmony_ci 2338c339a94Sopenharmony_ci```cpp 2348c339a94Sopenharmony_cibool Napi::Value::IsNumber() const; 2358c339a94Sopenharmony_ci``` 2368c339a94Sopenharmony_ci 2378c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::Number` or `false` 2388c339a94Sopenharmony_ciotherwise. 2398c339a94Sopenharmony_ci 2408c339a94Sopenharmony_ci### IsObject 2418c339a94Sopenharmony_ci 2428c339a94Sopenharmony_ci```cpp 2438c339a94Sopenharmony_cibool Napi::Value::IsObject() const; 2448c339a94Sopenharmony_ci``` 2458c339a94Sopenharmony_ci 2468c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::Object` or `false` 2478c339a94Sopenharmony_ciotherwise. 2488c339a94Sopenharmony_ci 2498c339a94Sopenharmony_ci### IsPromise 2508c339a94Sopenharmony_ci 2518c339a94Sopenharmony_ci```cpp 2528c339a94Sopenharmony_cibool Napi::Value::IsPromise() const; 2538c339a94Sopenharmony_ci``` 2548c339a94Sopenharmony_ci 2558c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::Promise` or 2568c339a94Sopenharmony_ci`false` otherwise. 2578c339a94Sopenharmony_ci 2588c339a94Sopenharmony_ci### IsString 2598c339a94Sopenharmony_ci 2608c339a94Sopenharmony_ci```cpp 2618c339a94Sopenharmony_cibool Napi::Value::IsString() const; 2628c339a94Sopenharmony_ci``` 2638c339a94Sopenharmony_ci 2648c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::String` or `false` 2658c339a94Sopenharmony_ciotherwise. 2668c339a94Sopenharmony_ci 2678c339a94Sopenharmony_ci### IsSymbol 2688c339a94Sopenharmony_ci 2698c339a94Sopenharmony_ci```cpp 2708c339a94Sopenharmony_cibool Napi::Value::IsSymbol() const; 2718c339a94Sopenharmony_ci``` 2728c339a94Sopenharmony_ci 2738c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::Symbol` or `false` 2748c339a94Sopenharmony_ciotherwise. 2758c339a94Sopenharmony_ci 2768c339a94Sopenharmony_ci### IsTypedArray 2778c339a94Sopenharmony_ci 2788c339a94Sopenharmony_ci```cpp 2798c339a94Sopenharmony_cibool Napi::Value::IsTypedArray() const; 2808c339a94Sopenharmony_ci``` 2818c339a94Sopenharmony_ci 2828c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `Napi::TypedArray` or 2838c339a94Sopenharmony_ci`false` otherwise. 2848c339a94Sopenharmony_ci 2858c339a94Sopenharmony_ci### IsUndefined 2868c339a94Sopenharmony_ci 2878c339a94Sopenharmony_ci```cpp 2888c339a94Sopenharmony_cibool Napi::Value::IsUndefined() const; 2898c339a94Sopenharmony_ci``` 2908c339a94Sopenharmony_ci 2918c339a94Sopenharmony_ciReturns `true` if the underlying value is a JavaScript `undefined` or `false` 2928c339a94Sopenharmony_ciotherwise. 2938c339a94Sopenharmony_ci 2948c339a94Sopenharmony_ci### StrictEquals 2958c339a94Sopenharmony_ci 2968c339a94Sopenharmony_ci```cpp 2978c339a94Sopenharmony_cibool Napi::Value::StrictEquals(const Napi::Value& other) const; 2988c339a94Sopenharmony_ci``` 2998c339a94Sopenharmony_ci- `[in] other`: The `Napi::Value` object to be compared. 3008c339a94Sopenharmony_ci 3018c339a94Sopenharmony_ciReturns a `bool` indicating if this `Napi::Value` strictly equals another 3028c339a94Sopenharmony_ci`Napi::Value`. 3038c339a94Sopenharmony_ci 3048c339a94Sopenharmony_ci### ToBoolean 3058c339a94Sopenharmony_ci 3068c339a94Sopenharmony_ci```cpp 3078c339a94Sopenharmony_ciNapi::Boolean Napi::Value::ToBoolean() const; 3088c339a94Sopenharmony_ci``` 3098c339a94Sopenharmony_ci 3108c339a94Sopenharmony_ciReturns a `Napi::Boolean` representing the `Napi::Value`. 3118c339a94Sopenharmony_ci 3128c339a94Sopenharmony_ciThis is a wrapper around `napi_coerce_to_boolean`. This will throw a JavaScript 3138c339a94Sopenharmony_ciexception if the coercion fails. If C++ exceptions are not being used, callers 3148c339a94Sopenharmony_cishould check the result of `Env::IsExceptionPending` before attempting to use 3158c339a94Sopenharmony_cithe returned value. 3168c339a94Sopenharmony_ci 3178c339a94Sopenharmony_ci### ToNumber 3188c339a94Sopenharmony_ci 3198c339a94Sopenharmony_ci```cpp 3208c339a94Sopenharmony_ciNapi::Number Napi::Value::ToNumber() const; 3218c339a94Sopenharmony_ci``` 3228c339a94Sopenharmony_ci 3238c339a94Sopenharmony_ciReturns the `Napi::Value` coerced to a JavaScript number. 3248c339a94Sopenharmony_ci 3258c339a94Sopenharmony_ci### ToObject 3268c339a94Sopenharmony_ci 3278c339a94Sopenharmony_ci```cpp 3288c339a94Sopenharmony_ciNapi::Object Napi::Value::ToObject() const; 3298c339a94Sopenharmony_ci``` 3308c339a94Sopenharmony_ci 3318c339a94Sopenharmony_ciReturns the `Napi::Value` coerced to a JavaScript object. 3328c339a94Sopenharmony_ci 3338c339a94Sopenharmony_ci### ToString 3348c339a94Sopenharmony_ci 3358c339a94Sopenharmony_ci```cpp 3368c339a94Sopenharmony_ciNapi::String Napi::Value::ToString() const; 3378c339a94Sopenharmony_ci``` 3388c339a94Sopenharmony_ci 3398c339a94Sopenharmony_ciReturns the `Napi::Value` coerced to a JavaScript string. 3408c339a94Sopenharmony_ci 3418c339a94Sopenharmony_ci### Type 3428c339a94Sopenharmony_ci 3438c339a94Sopenharmony_ci```cpp 3448c339a94Sopenharmony_cinapi_valuetype Napi::Value::Type() const; 3458c339a94Sopenharmony_ci``` 3468c339a94Sopenharmony_ci 3478c339a94Sopenharmony_ciReturns the `napi_valuetype` type of the `Napi::Value`. 3488c339a94Sopenharmony_ci 3498c339a94Sopenharmony_ci[`Napi::Boolean`]: ./boolean.md 3508c339a94Sopenharmony_ci[`Napi::BigInt`]: ./bigint.md 3518c339a94Sopenharmony_ci[`Napi::Date`]: ./date.md 3528c339a94Sopenharmony_ci[`Napi::External`]: ./external.md 3538c339a94Sopenharmony_ci[`Napi::Name`]: ./name.md 3548c339a94Sopenharmony_ci[`Napi::Number`]: ./number.md 3558c339a94Sopenharmony_ci[`Napi::Object`]: ./object.md 356