按位或 (|)

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

按位或 (|) 運算子返回一個數字或 BigInt,其二進位制表示中,如果兩個運算元中任意一個或兩個運算元中對應位為 1,則該位位置為 1

試一試

const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011

console.log(a | b); // 00000000000000000000000000000111
// Expected output: 7

語法

js
x | y

描述

| 運算子對兩種型別的運算元進行了過載:number 和 BigInt。對於數字,該運算子返回一個 32 位整數。對於 BigInt,該運算子返回一個 BigInt。它首先將兩個運算元強制轉換為數值,然後測試它們的型別。如果兩個運算元都變為 BigInt,則執行 BigInt 或操作;否則,它將兩個運算元轉換為32 位整數,並執行數字按位或操作。如果一個運算元變為 BigInt 而另一個運算元變為數字,則會丟擲 TypeError

該運算子以二進位制補碼形式對運算元的位表示進行操作。第一個運算元中的每個位與第二個運算元中的相應位配對:*第一個位*與*第一個位*,*第二個位*與*第二個位*,依此類推。該運算子應用於每對位,結果按位構造。

OR 運算的真值表是

x y x OR y
0 0 0
0 1 1
1 0 1
1 1 1
     9 (base 10) = 00000000000000000000000000001001 (base 2)
    14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)

超過 32 位的數字將丟棄其最高有效位。例如,以下超過 32 位的整數將被轉換為 32 位整數

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

警告:你可能會看到有人使用 | 0 來截斷數字為整數。將任何數字 x0 進行按位或操作會返回轉換為 32 位整數的 x,這會額外移除超出 -2147483648 到 2147483647 範圍的數字的前導位。請改用 Math.trunc()

對於 BigInt,沒有截斷。從概念上講,將正 BigInt 理解為具有無限數量的前導 0 位,將負 BigInt 理解為具有無限數量的前導 1 位。

示例

使用按位或

js
// 9  (00000000000000000000000000001001)
// 14 (00000000000000000000000000001110)

14 | 9;
// 15 (00000000000000000000000000001111)

14n | 9n; // 15n

規範

規範
ECMAScript® 2026 語言規範
# prod-BitwiseORExpression

瀏覽器相容性

另見