연산자 우선순위

하나의 연산식에 둘 이상의 연산자가 있는 경우, 실행 순서는 연산자의 우선순위(precedence)에 따라 결정된다.

5 + 3 * 6라는 기본적인 사칙연산의 식이 있을 때 곱셈이 먼저, 그 후에 덧셈이 일어난다. 이런 개념이 바로 연산자 우선순위이다. 여기서 곱셈은 덧셈보다 더 높은 우선순위를 가진다고 할 수 있다.

그리고 우리가 의도적으로 우선순위를 조절 하고 싶을 때도 사칙연산처럼 괄호를 사용하면 된다. (5 + 3) * 6라는 식에서는 곱셈보다 덧셈을 먼저 하는 것 처럼.

자바스크립트에는 기본적인 사칙연산 외에도 다양한 연산자가 있다.
그리고 이 모든 연산자에는 우선순위가 매겨져 있는데, 우선순위 숫자가 클수록 먼저 실행된다. 순위가 같으면 대부분은 왼쪽부터 시작해서 오른쪽으로 연산이 수행된다.
(간혹 = 이나 ** 같은 몇몇 연산은 반대로 하는 경우도 있다.)

아래는 각 연산자들에 대한 우선순위를 정리한 표이다.
잘 쓰이지 않거나, 특별한 경우에만 쓰이는 것들은 생략해 두었고, 주로 사용하는 것들에 대해서만 간단하게 요약해 놓았다.

아래 링크를 참고해 보는 것도 좋을 것 같다.
연산자 우선순위

다음 예시를 보자.

	typeof (6 * 2 === 11 || 13 - 7 < 7 && !true);

일단 우선순위가 높은 typeof 연산자가 나오기는 했지만, 가장 높은 우선순위인 괄호가 있으니까 괄호 내부를 먼저 연산해야 한다. 이 괄호 내부에도 다양한 연산자가 있는데, 가장 높은 우선순위에 있는 not 연산자를 먼저 연산해준다. true의 not 연산이니까 false가 된다.

typeof (6 * 2 === 11 || 13 - 7 < 7 && false);

그 다음으로 높은 우선순위는 사칙연산. 곱셈과 뺄셈이 있으니 각각의 연산을 실행하면

typeof (12 === 11 || 6 < 7 && false);

이처럼 된다. 이제 남은 연산자들 중에서 우선 순위가 가장 높은 연산자는 비교 연산이다. 일치와 미만 연산을 해주면

typeof (false || true && false);

이렇게 되는데, 이제 남은 건 논리연산이다. and연산이 or연산보다 우선순위가 높기 때문에 결과적으로는

typeof (false || false);

true && false의 연산 결과는 false이니까, 결과적으로 괄호내부의 마지막 연산은 false || false가 된다.

typeof false;

결국 이 연산의 마지막은 typeof false가 되고, 이 모든 연산의 결과값은 문자열 'boolean'이 된다.

profile
front-end developer

0개의 댓글