There are a few things that WASM can do that JS can't (at least not now):
- Memory management without GC
- Unboxed data structures
- SIMD
- Shared-memory multi-threading
- Precompiled snapshots (does not need to be recompiled on page reload)
BigInt landed in ES2020 and has been supported in something like the last 10-20 versions of Chrome and Firefox, so no huge worries about using it (the "current" browser without support is IE11).
The `123|0` type hint is also recognized and implemented by most browsers too. It forces a 31-bit integer on most platforms (and can offer a significant performance boosts if you're running a tight algorithm).