Signatur
Beschreibung
Der bitweise OR-Operator (|) arbeitet auf der binären Darstellung seiner Operanden. Für jedes Bit-Paar gilt: Das Ergebnisbit ist 1, wenn mindestens eines der beiden Bits 1 ist — andernfalls ist es 0. Die Wahrheitstabelle lautet: 0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1.
Beide Operanden werden zunächst in vorzeichenbehaftete 32-Bit-Ganzzahlen (Int32) umgewandelt. Das Ergebnis ist ebenfalls eine Int32-Zahl und wird anschließend wieder in einen normalen JavaScript-Number-Wert konvertiert. Für BigInt-Operanden entfällt die 32-Bit-Begrenzung — beide Operanden müssen dann vom Typ BigInt sein, andernfalls wird ein TypeError geworfen.
Typische Einsatzgebiete sind das Setzen bestimmter Bits in einer Bitmaske, das Kombinieren von Flags sowie einfache Ganzzahl-Tricks (z. B. schnelles Abschneiden von Nachkommastellen via x | 0). In modernem Code werden bitweise Operatoren hauptsächlich bei Low-Level-Datenverarbeitung, Grafikprogrammierung, Protokollimplementierungen oder Performance-kritischen Operationen eingesetzt.
Der Operator darf nicht mit dem logischen OR-Operator (||) verwechselt werden: || arbeitet auf Wahrheitswerten und gibt einen der beiden Operanden zurück, während | immer eine bitweise Integer-Operation durchführt und eine Zahl zurückliefert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $a Pflicht | number | bigint | — | Der linke Operand. Wird bei number in eine vorzeichenbehaftete 32-Bit-Ganzzahl umgewandelt. |
| $b Pflicht | number | bigint | — | Der rechte Operand. Wird bei number in eine vorzeichenbehaftete 32-Bit-Ganzzahl umgewandelt. Muss denselben Typ wie a haben, wenn a ein BigInt ist. |
Rückgabewert
number) bzw. ein BigInt, deren Bits an jeder Position 1 sind, wenn mindestens einer der Operanden an dieser Position eine 1 hatte.Beispiele
Grundlegendes Beispiel mit binären Werten
// 0b1010 = 10
// 0b0110 = 6
// 0b1110 = 14 (jede Position, an der mind. ein Bit gesetzt ist)
const a = 0b1010; // 10
const b = 0b0110; // 6
const result = a | b;
console.log(result.toString(2)); // "1110"
console.log(result); // 14
Flags mit Bitmasken setzen und kombinieren
// Berechtigungen als Bitmasken
const READ = 0b001; // 1
const WRITE = 0b010; // 2
const EXECUTE = 0b100; // 4
// Lese- und Schreibrecht kombinieren
const permissions = READ | WRITE;
console.log(permissions); // 3 (0b011)
// Prüfen, ob ein bestimmtes Flag gesetzt ist
const canRead = (permissions & READ) !== 0;
const canExec = (permissions & EXECUTE) !== 0;
console.log(canRead); // true
console.log(canExec); // false
// Nachträglich EXECUTE-Recht hinzufügen
const fullAccess = permissions | EXECUTE;
console.log(fullAccess); // 7 (0b111)
Nachkommastellen abschneiden mit | 0
// x | 0 konvertiert x in eine Int32 — Nachkommastellen werden verworfen
const pi = 3.14159;
const floored = pi | 0;
console.log(floored); // 3
const negative = -7.9 | 0;
console.log(negative); // -7 (kein Math.floor — Richtung 0!)
Bitweises OR mit BigInt
const x = 0b1010n; // BigInt
const y = 0b0101n; // BigInt
const result = x | y;
console.log(result); // 15n
console.log(result.toString(2)); // "1111"
// Wichtig · Fallstricke
Automatische Typumwandlung: Nicht-numerische Werte (z. B. null, undefined, true, Strings) werden vor der Operation über ToInt32 in Zahlen umgewandelt. null | 0 ergibt 0, true | 0 ergibt 1. Dies kann zu schwer nachvollziehbarem Verhalten führen — explizite Typumwandlung ist empfehlenswert.
32-Bit-Grenze: Zahlen außerhalb des Int32-Bereichs (±2 147 483 647) werden vor der Operation abgeschnitten. 2**32 | 1 ergibt 1, da 2**32 als Int32 den Wert 0 hat. Für größere Ganzzahlen muss BigInt verwendet werden.
Nicht mit logischem OR (||) verwechseln: a || b gibt a zurück, falls a truthy ist, sonst b — a | b führt immer eine bitweise Operation durch und gibt eine Zahl zurück.
BigInt-Mischung verboten: Das Kombinieren von number und BigInt (z. B. 5 | 2n) wirft einen TypeError.