비교 연산자는 좌항과 우항의 피 연산자를 비교한 다음 그 결과를 불리언 값으로 반환함
주로 if문과 for문과 같은 제어문에서 많이 사용함
연산자 | 의미 | 예시 | 설명 |
---|---|---|---|
== | 동등 비교 | x == y | x와 y의 값이 같음 |
=== | 일치 비교 | x === y | x와 y의 값과 타입이 같음 |
!= | 부동등 비교 | x == y | x와 y의 값이 다름 |
!== | 부일치 비교 | x == y | x와 y의 값과 타입 다름 |
== 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후
값이 같은지 비교함.
따라서 문자열인 '1'
과 숫자형인 1
이 같다고 표시된다.
5 == 5; // true
5 == '5'; // true -> 타입을 먼저 암묵적으로 일치 시킨 후에 비교하기 떄문에 같음
따라서
동등 비교 연산자(==)
보다는일치 비교 연산자(===)
를 사용하는 것이 좋다.
일치 비교 연산자(===)
는 값과 타입을 동시에 비교하기 떄문에 위와 같은 상황에서는 false를 반환한다.5 === 5; //true 5 === '5'; //false
NaN은 자기 자신과 일치하지 않는 유일한 값이기 떄문에 이를 비교하기 위해서는 Number.isNaN()
을 사용해서 비교해야한다.
NaN === NaN; //false
Number.isNan(NaN); //true
Number.isNan(1 + undefined); //true
Number.isNan('1'); //false
Number.isNan(1); //false
Number.isNaN()
는 지정한 값이 NaN인지 확인하고 그 결과를 불리언 값으로 리턴함
0 == -0;// true
0 === -0;// true
NaN == NaN; //false
NaN === NaN; //false
앞서 말했던 동등 비교 연산자(==)
와일치 비교 연산자(===)
도 0과 -0의 비교가 같다고 하거나, NaN과 NaN의 비교는 다르다고 평가하는데, Obejct.is()
는 이를 해결해줄 메서드로 ES6에서 새로 도입도니 메서드이다. 이 메서드는 이러한 문제를 한번에 해결한다.
Obejct.is(-0, +0) //false
Obejct.is(NaN, NaN) //true
이 메서드는 NaN과 NaN의 비교나, -0과 0의 비교를 가장 정확한 결과값으로 반환하고, 그 외에는 일치 비교 연산자(===)와 똑같이 동작하기 때문에, 이 메서드를 이용해서 비교하는 것이 가장 간편하고 정확할 것 같다.