7. 연산자
- 연산자(operator)는 하나 이상의 표현식을 대상으로 산술, 할당, 논리, 비교 등을 수행해 하나의 값을 만듦
- 연산 대상을 피연산자라고 함
7.1. 산술 연산자
- 산술 연산자는 피연산자를 수학적으로 계산하여 새로운 숫자 값을 만듦
7.1.1. 이항 산술 연산자
- 2개의 피연산자 산술 연산, 항상 새로운 값 생성
- +, -, *, /, %
7.1.2. 단항 산술 연산자
- 1개의 피연산자 산술 연산, 피연산자의 값을 변경함(암묵적 할당)
- ++, --, +, -
- 전위 증가/감소 연산자, 후위 증가/감소 연산자
7.1.3. 문자열 연결 연산자
- + 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작함
7.2. 할당 연산자
- 할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항 변수에 할당
- 할당문은 값으로 평가되는 표현식인 문으로서, 할당된 값으로 평가됨
- ex) console.log(x=10); // 10
7.3. 비교 연산자
- 비교 연산자는 좌항과 우항의 피연산자를 비교한 다음, 결과를 불리언 값으로 반환
- 주로 if 문이나 for문과 같은 제어문의 조건식에서 사용
7.3.1. 동등/일치 비교 연산자
- 동등/부동등 비교 (==, !=): 값이 같거나 다름 비교
- 일치/불일치 비교 (===, !==): 값과 타입이 같거나 다름 비교
- 사용 권장
- NaN 예외, Number.isNaN 내장 함수 사용
- Object.is(a,b): ES6 도입된 내장 함수, 동일한 기능
7.3.2. 대소 관계 비교 연산자
7.4. 삼항 조건 연산자
- 삼항 조건 연산자는 조건식의 평가 결과에 따라 반환 값 결정
- 조건식 ? true 일 때 반환할 값 : false 일 때 반환할 값
- 조건식의 평가 결과는 불리언으로 암묵적 타입 변환
- 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문
- 조건에 따라 어떤 값을 결정해야 한다면 삼항 조건 연산자 표현식
- 조건에 따라 수행해야 할 문이 여러 개라면 if문 권장
7.5. 논리 연산자
- 우항과 좌항의 피연산자를 논리 연산
- 항상 불리언 값 리턴, 피연산자는 암묵적 타입 변환됨
7.6. 쉼표 연산자
- 쉼표 연산자는 왼쪽 피연산자부터 차례대로 평가하여 마지막 피연산자의 평가 결과를 반환함
7.7. 그룹 연산자
- 그룹 연산자는 소괄호('()')로 감싼 피연산자들로, 가장 먼저 평가함
7.8. typeof 연산자
- 피연산자의 데이터 타입을 문자열로 반환함
- string, number, boolean, undefined, symbol, object, function
- null은 반환하지 않음, 일치 연산자(===) 사용 권장
7.9. 지수 연산자
- 좌항의 피연산자를 밑(base)으로 우항의 피연산자를 지수(exponent)로 거듭 제곱함
- ES7에서 도입, 이전에는 Math.pow 사용함
- 이항 연산자 중에서 우선 순위가 가장 높음
7.10. 그 외의 연산자
- 옵셔널 체이닝 (?.)
- null 병합 연산자 (??)
- 프로퍼티 삭제 (delete)
- 인스턴스 생성 (new) 등
7.11. 연산자의 부수 효과
- 일부 연산자는 다른 코드에 영향을 주는 부수 효과가 있음
- 할당 연산자(=), 증가/감소 연산자(++/--), delete 연산자 등
7.12. 연산자 우선 순위
- () 그룹 연산자
- 그룹 연산자를 사용하여 명시적으로 우선 순위를 조절할 것을 권장
- new(매개변수 존재), [] (프로퍼티 접근), ()(함수 호출), ?. (옵셔널 체이닝)
- new(매개변수 미존재)
- x++, x-- (후위)
- !x, ++x, --x, typeof, delete
- ** (이항 연산자 중 가장 높음)
- *, /, %
- +, -
7.13. 연산자 결합 순서
- 좌항 -> 우항: +,-,/,%,<,<=,>,>=,&&,|| 등
- 우항 -> 좌항: ++,--,할당 연산자,! 등
[출처] 모던 자바스크립트, Deep Dive