간단히 설명하자면, 동등 연산자==
는 데이터 타입을 확인하지 않고 값을 비교하고, 일치 연산자 ===
는 같은 데이터 타입 안에서 값을 비교하는 차이가 있다.
==
==
는 비교 대상을 같은 타입으로 바꾸어 비교하는, 상대적으로 관대한 비교를 한다. 이 과정에는 다음과 같은 규칙이 존재한다.
두 비교 대상의 데이터 타입이 같다면 일치 연산자 ===
처럼 비교한다.
undefined ==
null
한쪽의 데이터 타입이 string
이고 다른 쪽은 number
라면, string
을 number
로 바꾸어 비교한다.
한쪽의 데이터 타입이 boolean
이고 다른 쪽은 non-boolean
이라면, boolean
을 number
로 바꾼 후 비교한다.
객체에서 string
타입과 number
타입을 비교할 땐, 객체를 원시자료형으로 바꾸어 비교한다.
===
===
는 데이터 타입과 값을 모두 비교하는 엄격한 비교를 한다. 따라서 타입과 값이 모두 같을 때만 참을 반환하고 다르면 거짓을 반환한다.
두 문자열을 비교할 경우, 완전히 동일한 문자열을 비교해야만 참을 반환한다. string
이라는 데이터 타입만 같고 문자열 속의 글자가 한글자라도 다르다면 거짓을 반환한다.
원시자료형 타입인 number
, boolean
역시 정확히 같은 값을 가지고 있어야만 참을 반환한다.
객체와 배열은 참조 자료형이므로 동등 연산자나 일치 연산자로 비교할 수 없다. 하지만 식별자 번호(배열의 경우 인덱스 넘버, 객체의 경우 속성)를 통해 내부의 각 요소들은 비교할 수 있다.
NaN
, null
, undefined
는 다른 모든 데이터 타입과 일치 연산자 ===
를 사용해 비교했을 때 반드시 거짓을 반환한다. NaN
은 일치 연산자 ===
로 자기 자신과 비교해도 거짓을 반환한다.
// number 타입과 비교
NaN === 1; // false
null === 1; // false
undefined === 1; // false
// string 타입과 비교
NaN === '1'; // false
null === '1'; // false
undefined === '1'; // false
// boolean 타입과 비교
NaN === true; // false
null === true; // false
undefined === true; // false
NaN === false; // false
null === false; // false
undefined === false; // false
// 자기 자신과 비교
NaN === NaN; // true
null === null; // true
undefined === undefined; // false