연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다. 피연산자는 연산의 대상이 되는 값이다. 피연산자는 값으로 해석될 수 있는 표현식이어야 한다.
// 산술 연산자
5 * 4 // 20
// 문자열 연결 연산자
'My name is ' + 'Lee' // "My name is Lee"
// 할당 연산자
color = 'red' // "red"
// 비교 연산자
3 > 5 // false
// 논리 연산자
true && false // false
// 타입 연산자
typeof 'Hi' // "string"
피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 산술이 불가능할 경우 NaN을 반환.
이항 산술 연산자
피연산자의 값이 바뀌는 경우는 없고 새로운 값을 만들 뿐이다.
단항 산술 연산자
연산사 중 증가/감소 (++
/--
) 연산자는 피연산자의 값을 변경하는 부수효과가 있다.
문자열 연결 연산자
+
연산자는 피연산자 중 하나 이상이 문자열이면 문자열 연결 연산자로 동작한다.
// 문자열 연결 연산자
'1' + 2 // '12'
1 + '2' // '12'
// true는 1로 타입 변환된다.
1 + true // 2
// false는 0으로 타입 변환된다.
1 + false // 1
개발자의 의도와는 상관없이 자바스크립트 엔진의 암묵적 타입이 자동 변환되기도 한다.
이를 암묵적 타입 변환 또는 타입 강제 변환이라 한다.
피연산자의 해석 결과를 좌항에 있는 변수에 할당한다. 할당문은 값으로 해석되는 표현식인 문으로서 할당된 값으로 해석된다.
좌항과 우항의 피연산자를 비교한 다음, 그 결과를 불리언 타입으로 반환한다.
==
!=
는 값을 비교하지만 ===
!==
는 값과 타입까지 비교한다.==
) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 비교한다.조건식의 평가 결과에 따라 반환할 값을 결정한다. 자바스크립트의 유일한 삼항 연산자이며 부수 효과를 발생시키지 않는다.
var result = score >= 60 ? 'pass' : 'fail';
첫 번째 피연산자가 참이면 두 번째 피연산자를 반환하고, 첫 번째 피연산자가 거짓이면 세 번째 피연산자를 반환한다.
만약 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환된다.
여러 개의 연산자로 이루어진 문이 있을 경우 어떤 순서로 연산을 수행할 것인가를 결정하는 규칙을 연산자 우선순위라 한다.
연산자 우선순위
1. () 그룹 연산자
2. . [] () 객체 프로퍼티 접근, 배열 요소 접근, 함수호출
3. new (매개변수가 없는) 생성자 함수 호출
4. ++ -- 증가/감소
5. ! ~ - + typeof void delete 부정 논리부정 비트단위부정 단항플러스 단항마이너스 typeof 연산자 undefined 반환 연산자
6. ** 지수 연산자
7. * / % 곱셈 나눗셈 나머지
8. + - 덧셈 뺄셈
9. << >> >>> 좌우측 비트시프트
10. < <= > >= in instanceof 관계 연산자