Napi::Value
is the C++ manifestation of a JavaScript value. It is the base
class upon which other JavaScript values such as Napi::Number
,
Napi::Boolean
, Napi::String
, and Napi::Object
are based. It represents a
JavaScript value of an unknown type. It is a thin wrapper around the Node-API
datatype napi_value
. Methods on this class can be used to check the JavaScript
type of the underlying Node-API napi_value
and also to convert to C++ types.
Napi::Value::Value();
Creates a new empty Napi::Value
instance.
Napi::Value::Value(napi_env env, napi_value value);
[in] env
: Thenapi_env
environment in which to construct theNapi::Value
object.[in] value
: The C++ primitive from which to instantiate theNapi::Value
. value` may be any of:bool
- Any integer type
- Any floating point type
const char*
(encoded using UTF-8, null-terminated)const char16_t*
(encoded using UTF-16-LE, null-terminated)std::string
(encoded using UTF-8)std::u16string
Napi::Value
napi_value
Napi::Value::operator napi_value() const;
Returns the underlying Node-API napi_value
. If the instance is empty, this
returns nullptr
.
bool Napi::Value::operator ==(const Napi::Value& other) const;
Returns true
if this value strictly equals another value, or false
otherwise.
bool Napi::Value::operator !=(const Napi::Value& other) const;
Returns false
if this value strictly equals another value, or true
otherwise.
template <typename T> T Napi::Value::As() const;
Casts to another type of Napi::Value
, when the actual type is known or
assumed.
This conversion does not coerce the type. Calling any methods inappropriate for
the actual value type will throw Napi::Error
. When C++ exceptions are
disabled, the thrown error will not be reflected before control returns to
JavaScript.
In order to enforce expected type, use Napi::Value::Is*()
methods to check
the type before calling Napi::Value::As()
, or compile with definition
NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS
to enforce type checks.
template <typename T> T Napi::Value::UnsafeAs() const;
Casts to another type of Napi::Value
, when the actual type is known or
assumed.
This conversion does not coerce the type. This does not check the type even if
NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS
is defined. This indicates intentional
unsafe type cast. Use Napi::Value::As()
if possible.
Napi::Env Napi::Value::Env() const;
Returns the Napi::Env
environment this value is associated with. See
Napi::Env
for more details about environments.
template <typename T>
static Napi::Value Napi::Value::From(napi_env env, const T& value);
[in] env
: Thenapi_env
environment in which to create theNapi::Value
object.[in] value
: The Node-API primitive value from which to create theNapi::Value
object.
Returns a Napi::Value
object from an Node-API primitive value.
This method is used to convert from a C++ type to a JavaScript value.
Here, value
may be any of:
bool
- returns aNapi::Boolean
.- Any integer type - returns a
Napi::Number
. - Any floating point type - returns a
Napi::Number
. const char*
(encoded using UTF-8, null-terminated) - returns aNapi::String
.const char16_t*
(encoded using UTF-16-LE, null-terminated) - returns aNapi::String
.std::string
(encoded using UTF-8) - returns aNapi::String
.std::u16string
- returns aNapi::String
.Napi::Value
- returns aNapi::Value
.Napi_value
- returns aNapi::Value
.
bool Napi::Value::IsArray() const;
Returns true
if the underlying value is a JavaScript Napi::Array
or false
otherwise.
bool Napi::Value::IsArrayBuffer() const;
Returns true
if the underlying value is a JavaScript Napi::ArrayBuffer
or
false
otherwise.
bool Napi::Value::IsBigInt() const;
Returns true
if the underlying value is a JavaScript Napi::BigInt
or false
otherwise.
bool Napi::Value::IsBoolean() const;
Returns true
if the underlying value is a JavaScript true
or JavaScript
false
, or false
if the value is not a Napi::Boolean
value in JavaScript.
bool Napi::Value::IsBuffer() const;
Returns true
if the underlying value is a Node.js Napi::Buffer
or false
otherwise.
bool Napi::Value::IsDataView() const;
Returns true
if the underlying value is a JavaScript Napi::DataView
or
false
otherwise.
bool Napi::Value::IsDate() const;
Returns true
if the underlying value is a JavaScript Date
or false
otherwise.
bool Napi::Value::IsEmpty() const;
Returns true
if the value is uninitialized.
An empty Napi::Value
is invalid, and most attempts to perform an operation on
an empty Napi::Value
will result in an exception. An empty Napi::Value
is
distinct from JavaScript null
or undefined
, which are valid values.
When C++ exceptions are disabled at compile time, a method with a Napi::Value
return type may return an empty Napi::Value
to indicate a pending exception.
Thus, when C++ exceptions are not being used, callers should check the result of
Env::IsExceptionPending
before attempting to use the value.
bool Napi::Value::IsExternal() const;
Returns true
if the underlying value is a Node-API external object or false
otherwise.
bool Napi::Value::IsFunction() const;
Returns true
if the underlying value is a JavaScript Napi::Function
or
false
otherwise.
bool Napi::Value::IsNull() const;
Returns true
if the underlying value is a JavaScript null
or false
otherwise.
bool Napi::Value::IsNumber() const;
Returns true
if the underlying value is a JavaScript Napi::Number
or false
otherwise.
bool Napi::Value::IsObject() const;
Returns true
if the underlying value is a JavaScript Napi::Object
or false
otherwise.
bool Napi::Value::IsPromise() const;
Returns true
if the underlying value is a JavaScript Napi::Promise
or
false
otherwise.
bool Napi::Value::IsString() const;
Returns true
if the underlying value is a JavaScript Napi::String
or false
otherwise.
bool Napi::Value::IsSymbol() const;
Returns true
if the underlying value is a JavaScript Napi::Symbol
or false
otherwise.
bool Napi::Value::IsTypedArray() const;
Returns true
if the underlying value is a JavaScript Napi::TypedArray
or
false
otherwise.
bool Napi::Value::IsUndefined() const;
Returns true
if the underlying value is a JavaScript undefined
or false
otherwise.
bool Napi::Value::StrictEquals(const Napi::Value& other) const;
[in] other
: TheNapi::Value
object to be compared.
Returns a bool
indicating if this Napi::Value
strictly equals another
Napi::Value
.
Napi::Boolean Napi::Value::ToBoolean() const;
Returns a Napi::Boolean
representing the Napi::Value
.
This is a wrapper around napi_coerce_to_boolean
. This will throw a JavaScript
exception if the coercion fails. If C++ exceptions are not being used, callers
should check the result of Env::IsExceptionPending
before attempting to use
the returned value.
Napi::Number Napi::Value::ToNumber() const;
Returns the Napi::Value
coerced to a JavaScript number.
Napi::Object Napi::Value::ToObject() const;
Returns the Napi::Value
coerced to a JavaScript object.
Napi::String Napi::Value::ToString() const;
Returns the Napi::Value
coerced to a JavaScript string.
napi_valuetype Napi::Value::Type() const;
Returns the napi_valuetype
type of the Napi::Value
.