ℹ️ INFORMATION/💾 HTML + CSS + JS

[JS] 자바스크립트(JavaScript) 연산자들의 우선순위

is. 2021. 2. 26. 20:39
반응형

처음에는 자바스크립트를 공부하면서

연산자가 그다지 중요하지 않다고 생각했다.

당연스레 어렸을 때부터 배워온 수학을 떠올리면

당연한 것들이라고 생각했기 때문이다.

 

그런데 자바스크립트에서의 연산자는

수학에서의 연산자와 무조건 같은 의미가 아니다.

 

예를 들면,

수학에서 =는 최종 계산값을 구하는 연산자로

우항과 좌항이 같다는 의미를 가진다.

그런데 자바스크립트에서 =는 대입연산자로, 

좌항에 있는 변수에 우항에 있는 변수 값을 대입, 즉 저장하는 것을 의미한다.

 

또한 자바스크립트에서는 +가 

덧셈을 의미하기도 하지만,

숫자가 아닌 피연산자 앞에 적게되면(예: +prompt( ))

해당 값을 숫자형으로 변경해주는 "단항 연산자"로 사용되기도 한다.

즉, Number()와 같은 작업을 해준다고 보면 된다.

 

이 부분을 몰랐을 때는, 

아니 덧셈 기호를 왜 자꾸 앞에 붙일까 했는데

조금은 이해가 가기 시작했다.

참고로 단항 연산자로서 +는 이항덧셈연산자인 +보다 우선순위가 더 높다!

 

모던 자바스크립트에 적혀있는 예제를 보면,

이런 코드가 있다고 할 때,

해당 값이 23이 아닌, 5가 출력되는 이유가 바로 연산자 우선순위 때문.

let num1 = '2';
let num2 = '3';

alert( +num1 + +num2 ); // 5 출력

 

당연히 외울 필요는 없을 것 같고

기본적인 것들만 인식하고 있으면 될 것 같다!

 

순위가 높을수록 먼저 계산이 수행된다는 점을 기억하자.

연산자의 우선순위 (출처: MDN)
연산자 우선순위 연산자 이름 및 기능 연산 방향 연산자 기호
21 Grouping n/a ( … )
20 Member Access left-to-right … . …
Computed Member Access left-to-right … [ … ]
new (with argument list) n/a new … ( … )
Function Call left-to-right … (  )
Optional chaining left-to-right ?.
19 new (without argument list) right-to-left new …
18 Postfix Increment n/a … ++
Postfix Decrement … --
17 Logical NOT (!) right-to-left ! …
Bitwise NOT (~) ~ …
Unary plus (+) + …
Unary negation (-) - …
Prefix Increment ++ …
Prefix Decrement -- …
typeof typeof …
void void …
delete delete …
await await …
16 Exponentiation (**) right-to-left … ** …
15 Multiplication (*) left-to-right … * …
Division (/) … / …
Remainder (%) … % …
14 Addition (+) left-to-right … + …
Subtraction (-) … - …
13 Bitwise Left Shift (<<) left-to-right … << …
Bitwise Right Shift (>>) … >> …
Bitwise Unsigned Right Shift (>>>) … >>> …
12 Less Than (<) left-to-right … < …
Less Than Or Equal (<=) … <= …
Greater Than (>) … > …
Greater Than Or Equal (>=) … >= …
in … in …
instanceof … instanceof …
11 Equality (==) left-to-right … == …
Inequality (!=) … != …
Strict Equality (===) … === …
Strict Inequality (!==) … !== …
10 Bitwise AND (&) left-to-right … & …
9 Bitwise XOR (^) left-to-right … ^ …
8 Bitwise OR (|) left-to-right … | …
7 Logical AND (&&) left-to-right … && …
6 Logical OR (||) left-to-right … || …
5 Nullish coalescing operator (??) left-to-right … ?? …
4 Conditional (ternary) operator( right-to-left … ? … : …
3 Assignment right-to-left … = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
… &&= …
… ||= …
… ??= …
2 yield right-to-left yield …
yield* yield* …
1 Comma / Sequence left-to-right … , …

 

이 표를 보면 아직 보지도 못한 것들이 많이 나오고

알았던 부분들도 이게 연산자라고? 싶은 것도 있다.

이걸 안다고 코딩을 실력이 1%라도 늘 것 같지는 않지만..

 

시간 낭비일 수도 있지만, 

필요할 때 보면서 공부해야겠다!

반응형