Signatur
Beschreibung
Der Konstruktor Float64Array() erzeugt ein typisiertes Array, dessen Elemente jeweils 8 Byte belegen und als 64-Bit-Gleitkommazahlen im Format IEEE 754 gespeichert werden. Das ist genau dasselbe Zahlenformat wie beim normalen JavaScript-Typ number. Werte gehen beim Speichern also nicht an Genauigkeit verloren. Alle Elemente werden mit 0 vorbelegt.
Der Konstruktor kennt mehrere Aufrufvarianten:
new Float64Array()odernew Float64Array(length): Es wird ein neuer, mit Nullen gefüllter Puffer mitlength × 8Byte angelegt.new Float64Array(typedArray): Die Werte eines anderen typisierten Arrays werden kopiert und dabei in Gleitkommazahlen umgewandelt.new Float64Array(object): Übernimmt die Werte aus einem Array, einem Iterable (z. B.Setoder einem Generator) oder einem array-ähnlichen Objekt.new Float64Array(buffer, byteOffset, length): Legt eine Sicht auf einen vorhandenenArrayBufferoderSharedArrayBufferan. Dabei wird nichts kopiert, Änderungen wirken sich direkt auf den Puffer aus.
Typische Einsatzgebiete sind numerische Berechnungen, Signalverarbeitung, wissenschaftliche Daten, WebGL/WebGPU (mit hoher Genauigkeit), WebAssembly-Speicher und binäre Dateiformate. Wenn einfache Genauigkeit reicht und Speicher knapp ist, eignet sich Float32Array besser, denn es braucht nur halb so viel Speicher.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $length | number | 0 | Anzahl der Elemente. Es werden length × 8 Byte reserviert, alle Werte sind 0. |
| $typedArray | TypedArray | Ein anderes typisiertes Array, dessen Werte in ein neues Array kopiert werden. Mit BigInt64Array oder BigUint64Array ist das nicht möglich, dann wird ein TypeError ausgelöst. |
|
| $object | Array | Iterable | ArrayLike | Ein Array, ein Iterable oder ein array-ähnliches Objekt. Jeder Wert wird mit Number() umgewandelt. |
|
| $buffer | ArrayBuffer | SharedArrayBuffer | Ein vorhandener Puffer, auf den das neue Array als Sicht zugreift. Die Daten werden nicht kopiert. | |
| $byteOffset | number | 0 | Startposition in Byte innerhalb von buffer. Muss ein Vielfaches von 8 sein. |
| $length | number | (buffer.byteLength - byteOffset) / 8 | Anzahl der Elemente der Sicht, wenn ein buffer übergeben wird. Fehlt die Angabe, reicht die Sicht bis zum Ende des Puffers. |
Rückgabewert
Float64Array-Objekt. Es enthält eigene Daten oder ist eine Sicht auf den übergebenen Puffer.Beispiele
Die verschiedenen Aufrufvarianten
// Nach Länge
const leer = new Float64Array(3);
console.log(leer); // alle Werte 0
// Aus einem Array
const werte = new Float64Array([1.5, Math.PI, -0.25]);
console.log(werte[1]);
// Aus einem Iterable (Set)
const ausSet = new Float64Array(new Set([10, 20, 30]));
console.log(ausSet.length);
// Kopie eines anderen typisierten Arrays
const ints = new Int16Array([1, 2, 3]);
const floats = new Float64Array(ints);
floats[0] = 0.5;
console.log(ints[0], floats[0]);
Sicht auf einen ArrayBuffer mit Offset
const buffer = new ArrayBuffer(32); // Platz für 4 Doubles
// Sicht auf die Elemente 1 und 2 (Byte 8 bis 23)
const mitte = new Float64Array(buffer, 8, 2);
mitte[0] = 42.42;
mitte[1] = -1e-10;
// Gesamtsicht auf denselben Speicher
const gesamt = new Float64Array(buffer);
console.log(gesamt);
console.log(mitte.byteOffset, mitte.byteLength);
Praxis: Mittelwert und Standardabweichung von Messwerten
const statistik = (daten) => {
const n = daten.length;
const mittel = daten.reduce((s, x) => s + x, 0) / n;
const varianz = daten.reduce((s, x) => s + (x - mittel) ** 2, 0) / n;
return { mittel, stdAbw: Math.sqrt(varianz) };
};
// Messwerte z. B. aus einem Sensor oder Worker
const messwerte = Float64Array.from({ length: 5 }, (_, i) => 20 + i * 0.5);
console.log(messwerte);
console.log(statistik(messwerte));
// Wichtig · Fallstricke
- Nur mit
newaufrufen:Float64Array([1, 2])ohnenewlöst einenTypeErroraus. - Ausrichtung:
byteOffsetmuss ein Vielfaches von 8 sein, sonst gibt es einenRangeError. Auchbuffer.byteLength - byteOffsetmuss durch 8 teilbar sein, wenn keinelengthangegeben ist. Für nicht ausgerichtete Daten eignet sichDataView.prototype.getFloat64(). - Byte-Reihenfolge: Typisierte Arrays verwenden die Byte-Reihenfolge der Plattform (praktisch immer Little-Endian). Für Netzwerkprotokolle oder Dateiformate mit fester Byte-Reihenfolge ist
DataViewdie bessere Wahl. - Sicht oder Kopie: Wird ein
ArrayBufferübergeben, entsteht eine Sicht, die sich den Speicher mit dem Puffer teilt. Wird ein Array oder typisiertes Array übergeben, werden die Werte kopiert. - Umwandlung: Nicht-numerische Werte werden mit
Number()umgewandelt."abc"wird zuNaN,undefinedebenfalls.BigInt-Werte lösen einenTypeErroraus. - Feste Länge: Die Länge ist fest, es gibt kein
push()und keinpop(). Ausnahme: eine Sicht ohnelengthauf einen größenveränderlichenArrayBuffer(ES2024) wächst und schrumpft mit dem Puffer mit. - Speicher: Sehr große Längen können einen
RangeErrorauslösen, wenn nicht genug Speicher reserviert werden kann.