모던 자바스크립트 Deep Dive 7장을 읽고 정리한 글이다.
- 연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다
- 피연산자
- 연산의 대상
- 값으로 평가될 수 있는 표현식이어야 함
1. 산술 연산자
- 피연산자를 대상으로 수학적 계산을 수행해 숫자 값을 생성
- 산술 연산이 불가능한 경우 NaN을 반환
- 피연산자의 개수에 따라 이항 산술 연산자와 단항 산술 연산자로 구분
1.1 이항 산술 연산자
- 2개의 피연산자를 산술 연산
- 피연산자의 값을 변경하는 부수 효과가 없음
- 종류: +, -, *, /, %
1.2 단항 산술 연산자
- 1개의 피연산자를 산술 연산
- 종류: ++, --, +, -
- ++, -- 연산자는 증가/감소 연산을 하면 피연산자의 값을 변경하는 암묵적 할당이 이뤄짐
1.3 문자열 연결 연산자
- 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작
2. 할당 연산자
- 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당
- 종류: =, +=, -=, *=, /=, %=
- 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가됨
- 이러한 특징을 활용해 여러 변수에 동일한 값을 연쇄 할당 가능
var a, b, c;
//연쇄 할당. 오른쪽에서 왼쪽으로 진행
// 1. c = 0 0으로 평가된다
// 2. b = 0 0으로 평가된다
// 3. a = 0 0으로 평가된다
a = b = c = 0;
3. 비교 연산자
- 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환
3.1 동등/일치 비교 연산자
- 동등 비교 연산자는 느슨한 비교. 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치 시킨 후 같은 값인지 비교
==
: x와 y의 값이 같음
!=
: x와 y의 값이 다름
- 일치 비교 연산자는 엄격한 비교
===
: x와 y의 값과 타입이 같음
!==
: x와 y의 값과 타입이 다름
- Object.is 메서드
-0 === +0 //true
Object.is(-0, +0) //false
NaN === NaN; //false
Object.is(NaN, NaN) //true
3.2 대소 관계 비교 연산자
- 피연산자의 크기를 비교하여 불리언 값 반환
- 종류 : >, <, >=, <=
4. 삼항 조건 연산자
- 조건식의 평가 결과에 따라 반환할 값을 결정
- 삼항 조건 연산자 표현식
조건식 ? 조건식이 true일 때 반환할 값: 조건식이 false일 때 반환할 값
- 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문이다
- 조건에 따라 어떤 값을 결정해야 한다면 해당 표현식일 사용하는 편이 유리, 조건에 따라 수행해야 할 문이 하나가 아니라 여러 개라면 if..else문의 가독성이 더 좋음
5. 논리 연산자
- 우항과 좌항의 피연산자를 논리 연산 수행
- 종류 : ||(OR), &&(AND), !(NOT)
!
연산자는 언제나 불리언 값을 반환. 만약 피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 타입 변환
||
또는 &&
연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가됨
6. 쉼표 연산자
- 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환
var x, y, z;
x = 1, y = 2, z = 3 //3
7. 그룹 연산자
- 소괄호로 피연산자를 감싸는 연산자
- 그룹 연산자를 사용하면 연산자의 우선순위를 조절 가능
8. typeof 연산자
- 피연산자의 데이터 타입을 문자열로 반환
- string, number, boolean, undefined, symbol, object, function 중 하나를 반환
- typeof로 null 값을 연산해보면 null이 아닌 object를 반환
- 값이 null 타입인지 확인할 땐느 일치 연산자를 사용할 것
- 선언하지 않은 식별자를 typeof 연산자로 연산해보면 undefined를 반환
9. 지수 연산자
- 좌항의 피연산자를 밑으로 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환
10. 그 외의 연산자
- ?, ??, delete, new, instanceof, in (다른 내용에서 살펴볼 것)
11. 연산자의 부수 효과
- 할당 연산자(=), 증가/감소 연산자(++,--), delete 연산자는 다른 코드에 영향을 주는 부수 효과가 있음
- 할당 연산자는 변수 값이 변하는 부수 효과가 있어 해당 변수를 사용하는 다른 코드에 영향을 줌
- 증가/감소 연산자는 피연산자의 값을 변경하는 부수 효과가 있음
- delete 연산자는 객체의 프로퍼티를 삭제하는 부수 효과가 있어 해당 객체를 사용하는 다른 코드에 영향을 줌
12. 연산자 우선순위
우선순위 | 연산자 | 설명 |
---|
1 | 괄호/대괄호 | ()[] |
2 | 단항 연산자 | !, ++, -- |
3 | 곱셈/나눔셈 연산자 | *, /, % |
4 | 덧셈/뺄셈 연산자 | +, - |
5 | 비교 연산자 | >, >=, <, <= |
6 | 비교 연산자 | ==, ===, !=, !== |
7 | 논리 곱 연산자 | && |
8 | 논리 합 연산자 | ㅣㅣ |
9 | 대입 연산자 | =, +=, -=, *=, /=, %= |
10 | 쉼표 | , |