Signatur
Beschreibung
Der Operator &= ist eine verkürzte Schreibweise für x = x & y. Er kombiniert den bitweisen UND-Operator (&) mit einer Zuweisung: Beide Operanden werden in 32-Bit-Ganzzahlen (zwei's-Komplement) umgewandelt, jedes Bit-Paar wird mit dem logischen UND verknüpft, und das Ergebnis wird dem linken Operanden zugewiesen.
Das bitweise UND gibt für jede Bit-Position genau dann eine 1 zurück, wenn beide Bits an dieser Position den Wert 1 haben. Andernfalls ist das Ergebnis-Bit 0. Das macht &= besonders nützlich zum Maskieren von Bits, also zum gezielten Löschen oder Prüfen einzelner Bit-Flags in einem Ganzzahlwert.
Typische Anwendungsfälle sind Low-Level-Operationen wie die Arbeit mit Berechtigungs-Flags, Hardware-Registern, Farb-Kanälen in Pixelwerten oder performanzkritischer Datenverarbeitung. Auch das Erzwingen gerader Zahlen (letztes Bit auf 0 setzen) oder das Beschränken von Werten auf einen Zahlenbereich sind klassische Einsatzgebiete.
Nicht-ganzzahlige Operanden werden vor der Operation mittels ToInt32 in 32-Bit-Ganzzahlen umgewandelt. BigInt-Werte werden ebenfalls unterstützt, dürfen jedoch nicht mit regulären Zahlen gemischt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | bigint | — | Der linke Operand, dem das Ergebnis der bitweisen UND-Operation zugewiesen wird. Muss ein gültiges Zuweisungsziel (Variable, Objekt-Eigenschaft, Array-Element) sein. |
| $y Pflicht | number | bigint | — | Der rechte Operand. Wird mit x bitweise per UND verknüpft. |
Rückgabewert
x und y — eine 32-Bit-Ganzzahl (oder BigInt), die gleichzeitig in x gespeichert wird.Beispiele
Grundlegendes Beispiel — einzelne Bits maskieren
let a = 0b1101; // 13
a &= 0b1010; // 10
console.log(a); // Ergebnis: 0b1000 = 8
let b = 15; // 0b00001111
b &= 9; // 0b00001001
console.log(b);
Gerade Zahl erzwingen (letztes Bit löschen)
let n = 7; // ungerade
n &= ~1; // Bit 0 auf 0 setzen → 6
console.log(n);
let m = 42; // bereits gerade
m &= ~1;
console.log(m);
Berechtigungs-Flags entfernen
const READ = 0b0001; // 1
const WRITE = 0b0010; // 2
const EXECUTE = 0b0100; // 4
let permissions = READ | WRITE | EXECUTE; // alle Rechte: 7
console.log('Vorher:', permissions.toString(2).padStart(4, '0'));
// WRITE-Recht entfernen (Bit per Komplement maskieren)
permissions &= ~WRITE;
console.log('Nachher:', permissions.toString(2).padStart(4, '0'));
console.log('Hat WRITE?', !!(permissions & WRITE));
Verwendung mit BigInt
let flags = 0b11111111n;
flags &= 0b00001111n; // nur die unteren 4 Bits behalten
console.log(flags);
// Wichtig · Fallstricke
Typumwandlung: Operanden vom Typ number werden intern per ToInt32 in 32-Bit-Ganzzahlen umgewandelt. Nachkommastellen, NaN, Infinity und -Infinity werden dabei zu 0. Das Ergebnis ist stets eine vorzeichenbehaftete 32-Bit-Ganzzahl im Bereich −2 147 483 648 bis 2 147 483 647.
BigInt-Einschränkung: BigInt-Werte dürfen nicht mit regulären number-Werten gemischt werden — dies führt zu einem TypeError.
Vorzeichenbit: Da 32-Bit-Ganzzahlen vorzeichenbehaftet sind, kann das Ergebnis bei großen Zahlen negativ erscheinen. Wer vorzeichenlose 32-Bit-Werte benötigt, kann mit >>> 0 (Zero-Fill-Right-Shift) konvertieren.
Nicht zu verwechseln mit dem logischen UND-Zuweisungsoperator &&=, der auf Wahrheitswerten arbeitet und keine bitweise Operation durchführt.