모던 JavaScript 튜토리얼을 따라가면서 정리합니다.
2.9. 비교 연산자
문자열 비교
자바스크립트는 사전순(사전편집순; lexicographical)으로 문자열을 비교한다. 문자열을 구성하는 문자 하나하나를 비교해가며 문자열을 비교한다.
정확히는 사전순이 아니라 유니코드순이다. 자바스크립트가 대소문자를 따질 때 유니코드에서는 소문자가 대문자보다 더 큰 인덱스를 가지고 있기 때문에 소문자가 더 크다고 판단한다.
다른 형을 가진 값 간의 비교
비교하려는 값의 자료형이 다르면 자바스크립트는 이 값들을 숫자형으로 바꾼다.
1
2
3
alert('2' > 1); // true
alert('01' == 1);
alert( true == 1 ); // true
일치 연산자
동등 연산자(equality operator) ==
은 0
과 false
, 빈문자열을 구별하지 못한다.
1
2
alert(0 == false); // true
alert('' == false); // true
이 문제는 동등 연산자 ==
가 형이 다른 피연산자를 비교할 때 피연산자를 숫자형으로 바꾸기 때문에 발생한다. 일치 연산자(strict equality operator) ===
를 사용하면 형 변환 없이 값을 비교할 수 있다. 자료형의 동등 여부까지 검사하기 때문에 형이 다르면 false를 즉시 반환한다. 일치연산자는 비교 결과가 명확하기 때문에 에러가 발생할 확률을 줄여준다.
null이나 undefined와 비교하기
null
이나 undefined
를 다른 값과 비교할 땐 예상치 않튼 일이 발생한다.
===
를 사용하여null
과undefined
를 비교: 거짓 반환--
를 사용하여null
과undefined
를 비교: 참 반환- 산술 연산자나 기타 비교연산자
< > <= >=
를 사용하여null
과undefined
를 비교null
은 0,undefined
는NaN
으로 변한다.
null
vs 0
1
2
3
alert( null > 0 ); // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true
비교연산자 > < >= <=
는 null
을 비교할 때 숫자형으로 바꾼다. 그러나 ==
는 피연산자가 undefined
나 null
일 때 형 변환을 하지 않는다.