연산자는 표현식을 대상으로 연산을 수행해서 값을 만든다.
1️⃣ 산술 연산자
이항 +
, -
, *
, /
, %
: 피연산자의 값을 변경하는 부수 효과가 없다.
단항 ++
, --
, +
, -
문자열 연결 +
'1' + 2; // '12'
1 + 2; // 3
1 + true; // 2
1 + null; // 1
+undefined; // NaN
1 + undefined; // NaN
2️⃣ 할당 연산자
=
, +=
, -=
, *=
, /=
, %=
3️⃣ 비교 연산자
대소 관계 비교
동등 비교(loose equailty) ==
: 암묵적 타입 변환으로 타입을 일치시킨 후, 비교한다.
일치 비교(strict equality) ===
: 타입도 같고, 값도 같아야 true를 반환한다.
✏️ example
NaN === NaN; // false
0 === -0; // true
0 == -0; // true
NaN은 자신과 일치하지 않는 유일한 값이다.
이 때, Object.is()
메서드를 사용히면 정확한 비교 결과를 얻을 수 있다.
Object.is(NaN, NaN); // true
Object.is(-0, +0); // true
4️⃣ 삼항 조건 연산자
5️⃣ 논리 연산자
||
, &&
, !
6️⃣ 쉼표 연산자
순서대로 피연산자를 평가하고 마지막 피연산자의 평가 결과를 반환한다.
var x, y, x;
(x = 1), (y = 2), (z = 3); // 3
7️⃣ 그룹 연산자
8️⃣ typeof 연산자
데이터 타입을 문자열로 반환한다.
선언하지 않은 변수를 typeof 로 연산하면, ReferenceError
가 발생하지 않고 undefined
이 반환된다.
✏️ example
typeof NaN; // NaN
typeof undefined; // undefined
typeof null; // object
typeof function () {}; // function
이 때, null은 null이 아니라 object가 반환되는 에러가 발생한다. 이는 자바스크립트의 첫 번째 버그다. 다른 코드에 영향을 줄 수 있어서 아직까지 수정하지 않는다고 한다.
따라서, null 타입인지 확인하려면 ===
연산자를 사용해야 한다.
9️⃣ 지수 연산자
🔟 그 외의 연산자
?.
??
delete
new
instanceof
in
부수 효과란, 다른 코드에 영향을 주는 효과다.
var x;
x = 1; // 할당문
console.log(x);
x++; // 증가 연산자
var o = { a: 1 };
delete o.a; // delete