거듭제곱 (**)
거듭제곱 연산자(**
)는 왼쪽 피연산자를 밑, 오른쪽 피연산자를 지수로 한 값을 구합니다.
BigInt
도 피연산자로 받을 수 있다는 점을 제외하면 Math.pow()
와 같습니다.
시도해보기
구문
js
x ** y;
설명
거듭제곱 연산자는 우측 결합성을 가집니다. 따라서 a ** b ** c
는 a ** (b ** c)
와 같습니다.
PHP, Python 등 거듭제곱 연산자(**
)를 포함하는 언어의 대부분은 거듭제곱 연산자가 단항 연산자(단항
+
, -
등)보다 높은 우선순위를 가집니다. 그러나 Bash처럼 단항 연산자가 더 높은 우선순위를
가지는 예외의 언어도 있습니다.
반면 JavaScript에서는 모호한 거듭제곱 표현식을 작성하는 것이 불가능합니다. 단항
연산자(+/-/~/!/delete/void/typeof
)를 밑 피연산자의 바로 앞에 사용할 수 없으며, 사용하려고 하면
SyntaxError
가 발생합니다.
js
-2 ** 2;
// Bash에서는 4, 다른 언어에서는 -4
// 모호한 식이므로 JavaScript에서 유효하지 않음
-(2 ** 2);
// JavaScript에서 -4, 저자의 의도가 명확함
참고로 어떤 언어에선 캐럿 기호 ^를 거듭제곱에 사용하지만, JavaScript에서 캐럿은 비트 XOR 연산자에서 사용합니다.
예제
기본 거듭제곱
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