자바스크립트 기본(9) - 비교 연산자
초과, 미만 비교 연산자 <
, >
이상, 이하 비교 연산자 <=
, >=
동등 비교 연산자 ==
부등 비교 연산자 !=
1.불린형 반환
비교 연산자를 사용하면 불린형 값이 반환된다.
비교한 내용이 참일 경우 true
가, 거짓일 경우 false
가 반환된다.
반환된 불린 값은 다른 값들처럼 변수에 할당할 수 있다.
2.문자열 비교
자바스크립트는 문자 간에 비교를 사전 순으로 비교한다.
이 기준을 적용하면 사전 뒤쪽의 문자열은 사전 앞쪽의 문자열보다 크다고 판단한다.
alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
실제 단어를 사전에 실을 때와 같이 문자 하나하나를 비교해가며 문자열을 비교한다.
(정확히는 사전 순이 아니라 유니코드 순이다.
이 때문에 소문자 a
가 대문자 A
보다 더 큰 문자열로 판별된다.)
3.다른 형을 가진 값 간의 비교
비교하려는 값이 다르면 자바스크립트는 이 값들을 숫자형으로 바꾼다.
alert( '2' > 1 ); // true
alert( '01' == 1 ); // true
alert( true == 1 ); // true
alert( false == 0 ); // true
아래와 같은 상황도 있다.
let a = 0;
alert( Boolean(a) ); // false
let b = "0";
alert( Boolean(b) ); // true
alert(a == b); // true!
숫자가 아닌 문자열과 수를 비교하면 false
만 발생한다.
alert("a" > 1); // false
alert("a" < 1); // false
alert("a" == 1); // false
이는 +"a"
의 값이 NaN
이기 때문인 것으로 보인다.(NaN
과 숫자 대소 비교 결과가 같다.)
4.일치 연산자
동등 연산자(equality operator) ==
은 0
, 빈문자열(''
)과 false
를 구별하지 못한다.
이는 동등 연산자가 형이 다른 피연산자를 숫자형으로 바꾸기 때문에 발생한다.
빈 문자열과 0
은 모두 숫자형으로 변환 시 0
이 된다.
이런 경우 사용할 수 있는 연산자가 일치 연산자(strict equaliry operator) ===
이다.
일치 연산자는 이름 그대로 엄격한 동등 연산자로, 자료형의 동등 여부까지 검사하기 때문에
피연산자의 형이 다를 경우 즉시 false
를 반환한다.===
의 부등 연산자 형태는 !==
이며, 일치 연산자는 비교 결과가 더욱 명확해 에러 확률을 줄여준다.
5.null, undefined
null
이나 undefined
를 비교하면 특별한 규칙이 적용돼 true
가 반환된다.
alert( null === undefined ); // false
두 값의 자료형이 다르기 때문에 일치 연산자는 false
가 발생한다.
alert( null == undefined ); // true
숫자형으로 변환 시 null
은 0
, undefined
는 NaN
으로 변환된다.
특이한 점은 위에서도 보았듯 NaN
과 숫자형을 비교하면 전부 false
가 발생한다.
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)
null
은 특정 경우에 true
를 반환한다.
alert( null > 0 ); // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true
가장 이상한 점은 null == 0
이 false
를 반환한다는 점이다.+null
은 0
을 나타내지만, 동등 연산자 ==
를 사용하면 피연산자가 null
이나 undefined
일 때 형 변환을 하지 않고null
과 undefined
끼리 비교할 때만 true
를 반환하기 때문이다.
이러한 케이스 때문에 ===
를 제외한 비교 연산자에 undefined
나 null
이 오지 않도록 주의해야 한다.
또한 변수에 undefined
나 null
이 할당될 가능성이 있다면 명확한 의도가 있지 않다면
대소 비교 연산자의 피연산자가 되지 않도록 주의해야 한다.
'TIL > 자바스크립트' 카테고리의 다른 글
[TIL] 모던 자바스크립트 정독하기 - 자바스크립트 기본(11) (0) | 2023.05.11 |
---|---|
[TIL] 모던 자바스크립트 정독하기 - 자바스크립트 기본(10) (0) | 2023.05.10 |
[TIL] 오늘의 자바스크립트 - 변수 (0) | 2023.05.08 |
[TIL] 모던 자바스크립트 정독하기 - 자바스크립트 기본(8) (0) | 2023.05.07 |
[TIL] 모던 자바스크립트 정독하기 - 자바스크립트 기본(7) (0) | 2023.05.06 |