: 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만듦
(산술 연산이 불가능한 경우 NaN 반환)
| 이항 산술 연산자 | 의미 | 부수 효과 |
|---|---|---|
| + | 덧셈 | x |
| - | 뺄셈 | x |
| * | 곱셈 | x |
| / | 나눗셈 | x |
| % | 나머지 | x |
| 단항 산술 연산자 | 의미 | 부수 효과 |
|---|---|---|
| ++ | 증가 | o |
| -- | 감소 | o |
| + | 효과x | o |
| - | 양수를 음수로, 음수를 양수로 반전 | o |
→ 피연산자의 값을 변경하는 부수 효과가 존재
var x = 5, result;
result = x++;
console.log(result, x); // 5 6
result = ++x;
console.log(result, x); // 7 7
result = x--;
console.log(result, x); // 7 6
result = --x;
console.log(result, x); // 5 5
var x = '1';
console.log(+x); // 1
console.log(x); // "1"
x = true;
console.log(+x); // 1
console.log(x); // true
x = false;
console.log(+x); // 0
console.log(x); // false
x = 'Hello';
console.log(+x); // NaN
console.log(x); // "Hello"
// 문자열 연결 연산자
'1' + 2; // → 12
1 + '2'; // → 12
// 산술 연산자
1 + 2; // → 3
// true는 1로 타입 변환
1 + true; // → 1
// false는 0으로 타입 변환
1 + false; // → 1
// null은 0으로 타입 변환
1 + null; // → 1
// undefined는 숫자 타입으로 변환 X
+undefined; // → NaN
1 + undefined; // → NaN
: 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당 (부수 효과)
→ 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가됨
| 비교 연산자 | 의미 | 사례 | 설명 | 부수 효과 |
|---|---|---|---|---|
| == | 동등 비교 | x == y | x와 y의 값이 같음 | x |
| === | 일치 비교 | x === y | x와 y의 값과 타입이 같음 | x |
| != | 부동등 비교 | x != y | x와 y의 값이 다름 | x |
| !== | 불일치 비교 | x !== y | x와 y의 값과 타입이 다름 | x |
NaN === NaN; // → false
Number.isNaN(NaN); // → true
Number.isNaN(10); // → false
Number.isNaN(1 + undefined); // → true
: 피연산자의 크기를 비교하여 불리언 값 반환
: 조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
→ 삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문
var x = 10;
// 삼항 조건 연산자 표현식은 표현식인 문이므로 값처럼 사용 가능
var result = x % 2 ? '홀수' : '짝수';
console.log(result); // 짝수
| 논리 연산자 | 의미 | 부수 효과 |
|---|---|---|
| || | 논리합 (OR) | x |
| && | 논리곱 (AND) | x |
| ! | 부정 (NOT) | x |
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)
: 왼쪽 피연산자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환
var x, y, z;
x = 1, y = 2, z = 3; // 3
: 소괄호로 피연산자를 감싸고 자신의 피연산자인 표현식을 가장 먼저 평가
→ 연산자의 우선순위 조절 가능
10 * 2 + 3 // → 23
// 그룹 연산자를 사용하여 우선순위 조절
10 * (2 + 3) // → 50
: 피연산자의 데이터 타입을 문자열로 반환
typeof ""; // → "string"
typeof 1; // → "number"
typeof NaN; // → "number"
typeof true; // → "boolean"
typeof undefined; // → "undefined"
typeof Symbol(); // → "symbol"
typeof null; // → "object"
typeof []; // → "object"
typeof {}; // → "object"
typeof new Date(); // → "object"
typeof /test/gi; // → "object"
typeof function () {}; // → "function"
var foo = null;
typeof foo === null; // → false
foo === null; // → true
// undeclared 식별자를 선언한 적이 없음
typeof undeclared; // → undefined
: 좌항의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환
2 ** 2; // → 4
2 ** 2.5; // → 5.65685424949238
-5 ** 2; // → SyntaxError
(-5) ** 2; // → 25
var num = 5;
num **= 2; // → 25
2 * 5 ** 2; // → 50
부수 효과가 있는 연산자
= 할당 연산자(=), 증가/감소 연산자(++/--), delete 연산자
var x;
// 할당 연산자 = 변수 값이 변하는 부수 효과
x = 1;
console.log(x); // 1
// 증가/감소 연산자 = 피연산자의 값을 변경하는 부수 효과
x++;
console.log(x); // 2
var o = { a: 1 };
// delete 연산자 = 객체의 프로퍼티를 삭제하는 부수 효과
delete o.a;
console.log(o); // {}