피연산자1 == 피연산자2
피연산자 1 === 피연산자2
true
, 다르다면 false
를 반환함.// 동등 비교. 결과를 예측하기 어렵다.
'0' == ''; // -> false
0 == ''; // -> true
0 == '0'; // -> true
false == 'false'; // -> false
false == '0'; // -> true
false == null; // -> false
false == undefined; // -> false
true
를, 다르다면 false
를 반환한다.// 일치 비교
5 === 5; // -> true
// 암묵적 타입 변환을 하지 않고 값을 비교한다.
// 즉, 값과 타입이 모두 같은 경우만 true를 반환한다.
5 === '5'; // -> false
variable
에 할당된 값이 NaN인지 확인하고 싶을때, if(variable === NaN)
이 아니라 Number의 isNaN() 메서드를 활용해야 한다.// NaN은 자신과 일치하지 않는 유일한 값이다.
NaN === NaN; // -> false
// Number.isNaN 함수는 지정한 값이 NaN인지 확인하고 그 결과를 불리언 값으로 반환한다.
Number.isNaN(NaN); // -> true
Number.isNaN(10); // -> false
Number.isNaN(1 + undefined); // -> true
===
를 사용하여 양의 0과 음의 0을 비교한다면 당연히 두 값이 다르다는 결과가 반환되어야 할 것 같은데, 실제로는 그렇지 않다.// 양의 0과 음의 0의 비교. 일치 비교/동등 비교 모두 결과는 true이다.
0 === -0; // -> true
0 == -0; // -> true
===
가 놓친 부분까지 확실히 비교해주는 함수라고 할 수 있다.===
의 비교와 동일하다.-0 === +0; // -> true
Object.is(-0, +0); // -> false
NaN === NaN; // -> false
Object.is(NaN, NaN); // -> true