Ce face Typed arrays (Uint8Array, Float64Array...)
Un typed array este o vedere asupra unui bloc de memorie (ArrayBuffer) în care fiecare element are același tip și aceeași mărime. Tipuri: Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float16Array, Float32Array, Float64Array, BigInt64Array, BigUint64Array.
Lungimea este fixă (nu există push sau pop), iar valorile sunt convertite la tipul tabloului: într-un Uint8Array, 256 devine 0 (depășire), iar într-un Uint8ClampedArray devine 255. Toate typed arrays moștenesc dintr-un părinte comun, numit în documentație TypedArray.
Metodele from și of, precum și metodele de parcurgere și căutare (at, map, filter, reduce, reduceRight, forEach, find, findIndex, findLast, findLastIndex, every, some, includes, indexOf, lastIndexOf, join, fill, copyWithin, slice, sort, reverse, toSorted, toReversed, with, keys, values, entries, toString, toLocaleString) funcționează la fel ca la tablourile obișnuite. Diferențe: map și filter returnează tot un typed array, iar sort fără funcție sortează numeric, nu alfabetic.
Parametri
| Parametru | Descriere |
|---|---|
lungime | tablou | buffer |
Numărul de elemente (inițial 0), un tablou cu valori sau un ArrayBuffer (cu poziție și lungime opționale). |
Ce returnează
Un typed array nou.
Exemple
Exemplul 1: Creare și conversia valorilor
const octeti = new Uint8Array([10, 255, 256, -1]);
const limitat = new Uint8ClampedArray([10, 255, 256, -1]);
console.log(octeti);
console.log(limitat);
console.log(new Float32Array(3));
console.log(Int16Array.of(1, 2, 3), Uint8Array.from("123", Number));
Rezultat
Uint8Array(4) [ 10, 255, 0, 255 ]
Uint8ClampedArray(4) [ 10, 255, 255, 0 ]
Float32Array(3) [ 0, 0, 0 ]
Int16Array(3) [ 1, 2, 3 ] Uint8Array(3) [ 1, 2, 3 ]
Exemplul 2: Metodele de tablou
const masuratori = new Float64Array([3.5, 10, 2, 7.25]);
console.log(masuratori.toSorted());
console.log(masuratori.map((x) => x * 2));
console.log(masuratori.reduce((s, x) => s + x, 0));
console.log(masuratori.at(-1), masuratori.includes(10), masuratori.join(" | "));
console.log(Array.isArray(masuratori), Array.from(masuratori));
Rezultat
Float64Array(4) [ 2, 3.5, 7.25, 10 ]
Float64Array(4) [ 7, 20, 4, 14.5 ]
22.75
7.25 true 3.5 | 10 | 2 | 7.25
false [ 3.5, 10, 2, 7.25 ]
Exemplul 3: Două vederi asupra aceleiași memorii
Ambele vederi citesc aceiași 4 octeți. Ordinea lor în Uint8Array depinde de procesor; pe aproape toate calculatoarele și telefoanele (little-endian), octetul cel mai puțin semnificativ vine primul. Pentru o ordine controlată folosește DataView.
const buffer = new ArrayBuffer(4);
const cuvant = new Uint32Array(buffer);
const octeti = new Uint8Array(buffer);
cuvant[0] = 0x01020304;
console.log(octeti);
Rezultat
Uint8Array(4) [ 4, 3, 2, 1 ]
Greșeli frecvente
- Încerci
pushpe un typed array și primeștiTypeError. Lungimea este fixă; creează un tablou nou mai mare și copiază datele cuset. - Pui valori prea mari într-un
Uint8Arrayși ele „se întorc” (256 devine 0). Alege tipul potrivit sauUint8ClampedArray. - Folosești
mappentru a transforma numere în texte. Rezultatul este tot un typed array numeric; transformă întâi în tablou obișnuit cuArray.from.
Comenzi înrudite
ArrayBuffer: Un bloc de memorie brută, de lungime dată în octeți; citit și scris prin typed arrays sau DataView.TypedArray.prototype.set / subarray: set copiază valori într-un typed array; subarray creează o vedere asupra unei bucăți, fără copiere.DataView: Citește și scrie numere de tipuri diferite la orice poziție dintr-un ArrayBuffer, cu ordinea octeților aleasă.