NaN
을 반환한다.이항 산술 연산자 | 의미 | 부수 효과 |
---|---|---|
+ | 더셈 | X |
- | 뺄셈 | X |
* | 곱셈 | X |
/ | 나눗셈 | X |
% | 나머지 | X |
단항 산술 연산자 | 의미 | 부수 효과 |
---|---|---|
++ | 증가 | O |
-- | 감소 | O |
+ | 어떠한 효과도 없다. 음수를 양수로 반전하지도 않는다. 암묵적인 타입 변환 | X |
- | 양수를 음수로, 음수를 양수로 반전한 값을 반환한다. 암묵적인 타입 변환 | X |
증가/감소(++/--) 연산자는 피연산자의 값을 변경하는 부수 효과가 있다.
var x = 1;
// ++ 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이루어진다.
x++; // x = x + 1;
console.log(x) //2
// -- 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이루어진다.
x--; // x = x - 1;
console.log(x) //1
증가/감소(++/--) 연산자는 위치에 의미가 있다.
var x = 5;
var 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
+/- 단항 연산자는 암묵적인 타입 지정을 해준다.
result = "1"
console.log(+result) // 1
console.log(-result) // -1
result = true
console.log(+result) // 1
result = false
console.log(+result) // 0
result = "Hello"
console.log(+result) // NaN
+
연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. // 문자열 연결 연산자
"1" + 2; // "12"
1 + 2; // 3
// true는 1로 타입 변환된다.
1 + true; // 2
// false는 0으로 타입 변환된다.
1 + false // 1
// null은 0으로 타입 변환된다.
1 + null; // 1
// undefined는 숫자로 타입이 변환되지 않는다.
+ undefined // NaN
1 + undefined // NaN
개발자의 의도와 상관없이 암묵적으로 타입이 자동 변환한다.
할당 연산자 | 예 | 동일 표현 | 부수 효과 |
---|---|---|---|
= | x = 5 | x = 5 | O |
+= | x += 5 | x = x + 5 | O |
-= | x -= 5 | x = x - 5 | O |
*= | x *= 5 | x = x * 5 | O |
/= | x /= 5 | x = x / 5 | O |
%= | x %= 5 | x = x % 5 | O |
할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.
비교 연산자 | 의미 | 사례 | 설명 | 부수 효과 |
---|---|---|---|---|
== | 동등 비교 | x == y | x와 y의 값이 같음 | X |
=== | 일치 비교 | x === y | x와 y의 값과 타입이 다름 | X |
!= | 부동등 비교 | x != y | x와 y의 값이 다름 | X |
!== | 불일치 비교 | x !== y | x와 y의 값과 타입이 다름 | X |
동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치 시킨 후 같은 값인지 비교한다.
일치 비교(===) 연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환한다.
NaN
은 자신과 일치하니 않는 유일한 값이다.
// NaN은 자신과 일치하지 않는 유일한 값이다.
// NaN인지 확인하기 위해서는 Number.isNaN을 사용해야 한다.
NaN === NaN // fasle
Number.isNaN(NaN) // true
// 양의 0과 음의 0도 같다는 것에 유의해야 한다.
0 === -0 // true
0 == -0 // true
조건식 ? 조건식이 true일 때 반환할 값 : 조건식이 false일 때 반환할 값
var x = 10;
// 삼항 조건 연산자 예시
var result = x % 2 ? "홀수" : "짝수";
console.log(result); // 짝수
논리 연산자 | 의미 | 부수 효과 |
---|---|---|
|| | 논리합(OR) | O |
&& | 논리곱(AND) | O |
! | 부정(NOT) | O |
var x, y, z;
x = 1, y = 2, z = 3;
// typeof 연산자로 null을 연산해보면 "null" 이아닌 "object"를 반환하는 것에 주의하자
// 자바스크립트의 첫 번째 버전의 버그 => 하지만 기존코드에 영향 줄까봐 아직 수정이 안됨
// 그래서 null 타입인지 확인하기 위해 일치 연산자(===)를 사용해야 한다.
const foo = null;
typeof foo === null; // false
foo === null; // true
// 선언하지 않은 식별자에 typeof 연산자를 사용하면 RefreneceError가 발생하지 않고 undefined를 반환한다.
typeof undeclared; // undefined
앞에서 살편본 바와 같이 동등 비교 연산자(==)와 일치 비교 연산자(===)는 +0과 -0을 동DLF하다고 평가한다., 또한 동일한 값인
NAN
과Nan
일 비교하면 다른 값 이라고 평가한다.ES6에서 도입된 Oject.is 메서드는 다음과 같이 예측 가능한 정확한 비교결과를 반환한다. 그 외에는 일치 비교 연산자(==)와 동일하게 동작한다.
논리 연산자로 구성된 복잡한 표현식은 가독성이 좋지 않아 한눈에 이해하기 어려울 때가 있다. 이러한 경우 드 모르간의 법칙을 활용하면 복잡한 표현식을 좀 더 가독성 좋은 표현식으로 변환할 수 있다.
!(x || y) === (!x && !y) !(x && y) === (!x || !y)