연산자(operator)는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다.
9 + 4 // -> 13 (덧셈)
9 - 4 // -> 5 (뺄셈)
9 * 4 // -> 36 (곱셈)
9 / 4 // -> 2.25 (나눗셈)
9 % 4 // -> 1 (나머지)
1개의 피연산자를 산술 연산해 숫자 값을 만든다.
// 증가, 감소 연산자
let num = 94;
num++; // num = num + 1;
num--; // num = num - 1;
--------------------------------------------------------------
// 연산자 위치에 따른 차이점
// num++, num-- 피연산자 뒤에 위치한 경우 먼저 다른 연산을 수행한 후
// 피연산자의 값을 증가/감소 시킨다.
let num = 94;
alert(num++); // 94, alert(num) 먼저 수행 후 num = num + 1 수행
alert(num); // 95, 증가된 num 값 95 출력
// ++num, --num 피연산자 앞에 위치한 경우 먼저 피연산자의 값을 증가/감소시킨 후
// 다른 연산을 수행한다.
let num = 94;
alert(--num); // 93, num = num - 1 수행 후 감소된 num 값 93 출력
alert(num); // 93, 위와 같은 값 출력
// + 연산자 (산술 연산자)
// 숫자 타입이 아닌 피연산자에 사용하면 숫자 타입으로 변환하여 변환한다.
// 피연산자는 변경점 없고 숫자 타입으로 변환한 값을 생성해서 반환한다.
let str = '94';
let test = 0;
test = +str;
// 숫자 타입으로 변환한 값을 생성해서 반환하기 때문에
// str은 '94' 그대로고 test에는 변환된 숫자타입 값 94가 출력 된다.
console.log(str); // '94'
console.log(test); // 94
let t = true;
let f = false;
console.log(+a); // 1
console.log(+f); // 0
// 문자열은 숫자 타입으로 변환할 수 없음 NaN을 반환한다.
// 숫자로 구성된 문자열과 다름
str = 'ninetyFour';
console.log(+str); // NaN
// 암묵전 타입 변환/ 타입 강제 변환
94 + true; // 95, true는 1로 변환된다.
94 + false; // 94, false는 0으로 변환된다.
94 + null; // 94, null은 0으로 변환된다.
+undefined; // NaN, undefined는 숫자 타입으로 변환되지 않는다.
1 + undefined; // NaN
// + 연산자 (문자열 연결 연산자)
// 피연산자 중 하나 이상이 문자열인 겨우 문자열 연결 연산자로 동작한다.
'9' + 4; // '94'
9 + '4'; // '94'
// - 연산자
// + 연산자와 같이 숫자 타입이 아닌 피연산자를 숫자타입으로 변환하여 변환한다.
// 차이점은 피연산자의 부호를 반전한 값을 반환한다.
-'94'; // -94
-true; // -1
-'ninetyFour'; // NaN
x = 94
x += 94 // x = x + 94
x -= 94 // x = x - 94
x *= 94 // x = x * 94
x /= 94 // x = x / 94
x %= 94 // x = x % 94
// 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.
let a, b, c;
// 연쇄 할당. 오른쪽에서 왼쪽으로 진행.
// 1. c = 0 : 0으로 평가된다.
// 2. b = 0 : 0으로 평가된다.
// 3. a = 0 : 0으로 평가된다.
a = b = c = 0;
console.log(a,b,c); // 0 0 0
비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 결과를 불리언 값으로 반환한다.
== 동등 비교 | x == y | x와 y의 값이 같음
=== 일치 비교 | x === y | x와 y의 값, 타입이 같음
!= 부동등 비교 | x != y | x와 y의 값이 다름
!== 불일치 비교 | x !== y | x와 y의 값, 타입이 다름
참고: 모던 자바스크립트 Deep Dive