This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2021.
The Atomics.sub() static method subtracts a given value at a given position in the array and returns the old value at that position. This atomic operation guarantees that no other write happens until the modified value is written back.
// Create a SharedArrayBuffer with a size in bytes const buffer = new SharedArrayBuffer(16); const uint8 = new Uint8Array(buffer); uint8[0] = 7; // 7 - 2 = 5 console.log(Atomics.sub(uint8, 0, 2)); // Expected output: 7 console.log(Atomics.load(uint8, 0)); // Expected output: 5
Atomics.sub(typedArray, index, value)
typedArrayAn integer typed array. One of Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, or BigUint64Array.
indexThe position in the typedArray to subtract a value from.
valueThe number to subtract.
The old value at the given position (typedArray[index]).
TypeErrorThrown if typedArray is not one of the allowed integer types.
RangeErrorThrown if index is out of bounds in the typedArray.
const sab = new SharedArrayBuffer(1024); const ta = new Uint8Array(sab); ta[0] = 48; Atomics.sub(ta, 0, 12); // returns 48, the old value Atomics.load(ta, 0); // 36
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
sub |
68 | 79 | 78 | 55 | 15.2 | 89 | 79 | 63 | 15.2 | 15.0 | 89 | 15.2 | 1.0.0 | 1.0 | 8.10.0 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/sub