js-sys - The `wasm-bindgen` Guide

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# `js-sys`

The `js-sys` crate provides raw bindings to all the global APIs guaranteed to exist in every JavaScript environment by the ECMAScript standard, and its source lives at `wasm-bindgen/crates/js-sys`. With the `js-sys` crate, we can work with `Object`s, `Array`s, `Function`s, `Map`s, `Set`s, etc... without writing the `#[wasm_bindgen]` imports by hand.

Documentation for the published version of this crate is available on docs.rs but you can also check out the master branch documentation for the crate.

For example, we can invoke JavaScript `Function` callbacks and time how long they take to execute with `Date.now()`, and we don't need to write any JS imports ourselves:

    #![allow(unused)]
    fn main() {
    use wasm_bindgen::prelude::*;

    #[wasm_bindgen]
    pub fn timed(callback: &js_sys::Function) -> f64 {
        let then = js_sys::Date::now();
        callback.apply(&JsValue::null(), &js_sys::Array::new()).unwrap();
        let now = js_sys::Date::now();
        now - then
    }
    }

The `js-sys` crate doesn't contain bindings to any Web APIs like `document.querySelectorAll`. These will be part of the `web-sys` crate.