pub struct JsValue(/* private fields */);
Expand description
The type of any JavaScript value, i.e., the root of all types.
The JsValue
type is a catch-all type that sits at the top of the
JavaScript type hierarchy.
All JavaScript values can be safely and statically
upcast to JsValue
; by contrast, a
downcast of a JsValue
to another type
requires a runtime check.
(For TypeScript programmers, this can be thought of as similar to TypeScript’s
unknown
type.)
The JsValue
type can be useful for generic, dynamic, or otherwise
hard-to-express API signatures, such as overloaded types:
// Takes a string and adds the specified padding to the left.
// If the padding is a string, it's added as-is.
// If the padding is a number, then that number of spaces is added.
fn pad_left(mut cx: FunctionContext) -> JsResult<JsString> {
let string: Handle<JsString> = cx.argument(0)?;
let padding: Handle<JsValue> = cx.argument(1)?;
let padding: String = if let Ok(str) = padding.downcast::<JsString, _>(&mut cx) {
str.value(&mut cx)
} else if let Ok(num) = padding.downcast::<JsNumber, _>(&mut cx) {
" ".repeat(num.value(&mut cx) as usize)
} else {
return cx.throw_type_error("expected string or number");
};
let new_value = padding + &string.value(&mut cx);
Ok(cx.string(&new_value))
}
Trait Implementations§
Source§impl Value for JsValue
impl Value for JsValue
Auto Trait Implementations§
impl Freeze for JsValue
impl RefUnwindSafe for JsValue
impl !Send for JsValue
impl !Sync for JsValue
impl Unpin for JsValue
impl UnwindSafe for JsValue
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more