거듭제곱 (**)

거듭제곱 연산자(**)는 왼쪽 피연산자를 밑, 오른쪽 피연산자를 지수로 한 값을 구합니다. BigInt도 피연산자로 받을 수 있다는 점을 제외하면 Math.pow()와 같습니다.

시도해보기

구문

js
x ** y;

설명

거듭제곱 연산자는 우측 결합성을 가집니다. 따라서 a ** b ** ca ** (b ** c)와 같습니다.

PHP, Python 등 거듭제곱 연산자(**)를 포함하는 언어의 대부분은 거듭제곱 연산자가 단항 연산자(단항 +, - 등)보다 높은 우선순위를 가집니다. 그러나 Bash처럼 단항 연산자가 더 높은 우선순위를 가지는 예외의 언어도 있습니다.

반면 JavaScript에서는 모호한 거듭제곱 표현식을 작성하는 것이 불가능합니다. 단항 연산자(+/-/~/!/delete/void/typeof)를 밑 피연산자의 바로 앞에 사용할 수 없으며, 사용하려고 하면 SyntaxError가 발생합니다.

js
-2 ** 2;
// Bash에서는 4, 다른 언어에서는 -4
// 모호한 식이므로 JavaScript에서 유효하지 않음

-(2 ** 2);
// JavaScript에서 -4, 저자의 의도가 명확함

참고로 어떤 언어에선 캐럿 기호 ^를 거듭제곱에 사용하지만, JavaScript에서 캐럿은 비트 XOR 연산자 (en-US)에서 사용합니다.

예제

기본 거듭제곱

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

연관성

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

단항 연산자와 사용하기

거듭제곱 결과의 부호를 반전하려면,

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

거듭제곱 표현식의 밑에 음수를 제공하려면,

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

명세

Specification
ECMAScript Language Specification
# sec-exp-operator

브라우저 호환성

BCD tables only load in the browser

같이 보기