冪 (**)

Baseline 已廣泛支援

此特性已得到良好確立,可跨多種裝置和瀏覽器版本使用。自 2017 年 3 月起,所有瀏覽器均支援此特性。

求冪運算子(**返回第一個運算元提升到第二個運算元冪次的結果。它等同於 Math.pow(),但它也接受 BigInt 作為運算元。

試一試

console.log(3 ** 4);
// Expected output: 81

console.log(10 ** -2);
// Expected output: 0.01

console.log(2 ** (3 ** 2));
// Expected output: 512

console.log((2 ** 3) ** 2);
// Expected output: 64

語法

js
x ** y

描述

** 運算子對兩種型別的運算元進行過載:數字和 BigInt。它首先 將兩個運算元強制轉換為數字值 並測試它們的型別。如果兩個運算元都變為 BigInt,則執行 BigInt 求冪;否則,執行數字求冪。如果一個運算元變為 BigInt 而另一個變為數字,則丟擲 TypeError

對於數字和 BigInt,0 的正冪次返回 000 次冪返回 1。對於數字,0 的負冪次返回 Infinity,而 -0 的負冪次返回 -Infinity

NaN ** 0(以及等效的 Math.pow(NaN, 0))是 NaN 不會透過數學運算傳播的唯一情況——儘管運算元為 NaN,但它返回 1。此外,當 base 為 1 且 exponent 為非有限值(±Infinity 或 NaN)時的行為與 IEEE 754 不同,後者規定結果應為 1,而 JavaScript 返回 NaN 以保留與原始行為的向後相容性。

對於 BigInt 求冪,如果指數 y 為負數,則丟擲 RangeError。這是因為任何負指數都可能導致 0 到 1 之間的值(除非底數為 1-10),該值會四捨五入為零,並且很可能是開發人員的錯誤。

求冪運算子是右結合的:a ** b ** c 等同於 a ** (b ** c)

在大多數語言中,例如 PHP、Python 和其他具有求冪運算子 (**) 的語言中,求冪運算子被定義為具有比一元運算子(例如一元 + 和一元 -)更高的優先順序,但也有少數例外。例如,在 Bash 中,** 運算子被定義為具有比一元運算子更低的優先順序。

在 JavaScript 中,不可能編寫模糊不清的求冪表示式。也就是說,你不能將一元運算子(優先順序為 14,包括 +/-/~/!/++/--/delete/void/typeof/await)直接放在底數之前;這樣做會導致 SyntaxError

例如,-2 ** 2 在 Bash 中是 4,但在其他語言(如 Python)中是 -4。這在 JavaScript 中是無效的,因為該操作是模糊不清的。你必須將其中一邊用括號括起來——例如,-(2 ** 2)——以明確意圖。

請注意,某些程式語言使用脫字號符號 ^ 進行求冪運算,但 JavaScript 將該符號用於按位異或運算子

示例

使用數字進行求冪

js
2 ** 3; // 8
3 ** 2; // 9
3 ** 2.5; // 15.588457268119896
10 ** -1; // 0.1
2 ** 1024; // Infinity
NaN ** 2; // NaN
NaN ** 0; // 1
1 ** Infinity; // NaN

其他非 BigInt 值被強制轉換為數字

js
2 ** "3"; // 8
2 ** "hello"; // NaN

使用 BigInt 進行求冪

js
2n ** 3n; // 8n
2n ** 1024n; // A very large number, but not Infinity

你不能在求冪中混合使用 BigInt 和數字運算元。

js
2n ** 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 ** 2n; // TypeError: Cannot mix BigInt and other types, use explicit conversions

要對 BigInt 和非 BigInt 進行求冪,請轉換其中一個運算元

js
2n ** BigInt(2); // 4n
Number(2n) ** 2; // 4

結合性

js
2 ** 3 ** 2; // 512
2 ** (3 ** 2); // 512
(2 ** 3) ** 2; // 64

與一元運算子一起使用

反轉求冪表示式結果的符號

js
-(2 ** 2); // -4

強制求冪表示式的底數為負數

js
(-2) ** 2; // 4

規範

規範
ECMAScript® 2026 語言規範
# sec-exp-operator

瀏覽器相容性

另見