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