연산자 우선순위
연산자 우선순위
표현식에 연산자가 여러 개 있을 경우 처리되는 규칙
우선 기본적인 우선순위 부터 알아보자
= 연산자 > && , || > ? :
이때, &&는 항상 || 보다 먼저 평가된다.
1) 단락 평가
&&, || 연산자는 좌측 피연산자의 평가 결과만으로 전체 결과가 이미 결정될 경우
우측 피연산자의 평가를 건너뛴다.
그래서 단락이라는 말이 유래되어 단락 평가 특성을 갖는다.
const doSomething = (opts) => {
if(opts && opts.cool){
...
}
}
위의 코드에서 opts가 유효하지 않으면 opts.cool의 평가를 자동으로 건너뛴다.
이로써 불필요한 작업이 줄어들게 된다.
2) 끈끈한 우정
이번에는 삼항 연산자 ?와 : 를 이용해 연산자의 우선순위를 알아보자
a && b || c ? c || b ? a : c && b : a
이 코드에서는 어떻게 우선순위를 갖고 평가되는가?
정답은 (a && b || c) ? (c || b) ? a : (c && b) : a 이다.
각 연산자의 우선순위는 && > || > ?, : 순으로 우선순위가 높기 때문이다.
그래서!
&&와 || 은 '끈끈한 우정'을 나눈 사이라 책에 기술되어 있다.
3) 결합성
일반적으로 연산자는 좌측부터 그룹핑이 일어나는지 우측부터 그룹핑이
일어나는지에 따라 좌측 결합성 또는 우측 결합성을 갖는다.
여기서 결합성이란 문제는 처리방향이 좌측➡우측 이냐, 우측➡좌측 이냐 하는
문제와는 전혀 다르다는 사실을 기억해야 한다.
&&와 ||은 좌측부터 결합하므로 (a && b) && c 와 a && b && c는 같다
삼항연산자 ? : 은 우측 결합이며 a ? b : c ? d : e는 a ? b : (c ? d : e)로 결합된다.
주의해야 할 것은, 삼항 연산자는 결합 순서에 따라 결과 값이 달라진다.
=도 우측 결합성 연산자 중 하나이다.
var a, b, c;
a = b = c = 42;
위의 코드에서 c = 42 ➡ b = 42 ➡ a = 42 순서로 처리된다.
엔진은 a = (b = (c = 42)) 처럼 해석된다.
4) 분명히 하자
연산자 우선순위/결합성과 손으로 ( )를 감싸주는 두 방법을 적절히 배합해야 한다.
두개의 ? : 조건 연산자가 체이닝된 코드가 있다면, ( )로 그룹핑하여 로직을 확실히 밝히자.
연산자 우선순위/결합성을 적절히 활용하여 짧고 깔끔한 코드를 작성하되
혼동을 줄이고 분명히 밝혀야 할 부분은 ( )로 예쁘게 감싸주는 것이 좋다.
'JavaScript > You Don't know JS' 카테고리의 다른 글
I don't know JS YET) 문법 - 에러 (0) | 2022.07.10 |
---|---|
I don't know JS YET) 문법 - 세미콜론 자동 삽입 (0) | 2022.07.09 |
I don't know JS YET) 문법 - 문과 표현식 (0) | 2022.07.05 |
I don't know JS YET 강제변환 (0) | 2022.04.28 |
I don't know JS YET 네이티브 (0) | 2022.04.08 |