on
모던 자바스크립트 2.9 비교연산자
모던 자바스크립트 2.9 비교연산자
비교연산자
보다 큼, 작음
: a>b, a
보다 크거나, 작거나 같음
: a>=b, a<=b
같음
: ==
같지 않음
: !=
불린형 반환
비교 연산자는 불린형을 반환
true / false
alert( 2 > 1 ); // true alert( 2 == 1 ); // false alert( 2 != 1 ); // true let result = 5 > 4; // 비교 결과를 변수에 할당 alert( result ); // true
문자열 비교
사전순으로 문자열 비교(정확히는 유니코드 순, 대문자와 소문자 구별, 'A'<'a')
사전 뒤쪽은 사존 앞쪽의 문자열보다 크다고 판단
alert( 'Z' > 'A' ); // true alert( 'Glow' > 'Glee' ); // true alert( 'Bee' > 'Be' ); // true
1. 문자열의 첫글자 비교
2. 첫글자가 같지 않으면 결론 냄, 같으면 두번째 글자로 비교
3. 글자 간 비교가 끝날 때까지 과정 반복
4. 비교가 종료됐지만 두 문자열의 길이가 다르면 길이가 긴 문자열이 더 크다고 결론, 문자열의 길이가 같다면 두 문자열은 동일하다고 결론
다른 형을 가진 값 간의 비교
비교하려는 값의 자료형이 다르면 이 값을 숫자로 변경
alert( '2' > 1 ); // true, 문자열 '2'가 숫자 2로 변환된 후 비교가 진행됩니다. alert( '01' == 1 ); // true, 문자열 '01'이 숫자 1로 변환된 후 비교가 진행됩니다. 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!
a와 b의 불린값은 각각 다르지만
둘을 동등 연산자로 비교하면 같다고 출력 됨.
동등연산자 ==에서 문자열 "0"을 숫자 0으로 변환시키기 때문
일치 연산자
동등 연산자 ==는 0과 false 구분하지 못함
동등연산자는 형이 다른 피연사를 비교할 때 피연산자를 숫자형으로 바꾸기 때문에.
alert( 0 == false ); // true alert( '' == false ); // true
일치연산자 ===는 형 변환 없이 값 비교 가능
매우 엄격. 형이 다를 경우 즉시 false 반환
alert( 0 === false ); // false, 피연산자의 형이 다르기 때문입니다.
에러 발생 확률을 줄여줌
null이나 undefined와 비교하기
alert( null === undefined ); // 자료형이 다르기 때문에 false alert( null == undefined ); // true!!!!!!!!두 값끼리만 잘 어울린다고 함
지멋대로인 애들
alert( null > 0 ); // false alert( null == 0 ); // false alert( null >= 0 ); // true
큰건 false, 같은건 false이면서
크거나 같은건 true인건 무슨 심보일까
>, >= 은 null이 숫자로 변환 돼 0이 됨
동등 연산자 ==는 피연산자가 undefined 나 null일 때 형 변환 x
비교가 불가능한 undefined
alert( undefined > 0 ); // false alert( undefined < 0 ); // false alert( undefined == 0 ); // false
>, < 에서는 숫자형으로 변환
(동등연산자는 null또는 undefined를 비교할 때 형 변환하지 않는다.)
undefinned를 숫자로 변환하면 NaN
NaN이 피연산자인 경우에 비교 연산자는 항상 false 반환
결.론.
=> 비교 연산자들은 다른 형의 피연산자들을 비교할 때 숫자로 변환한다.
=> 일치 연산자는 형까지 비교하기 때문에 변환하지 않는다.
=> 동등 연산자는 null과 undefined를 비교하는 경우 예외적으로 true를 반환한다.
=> 동등연산자는 피연산자 중 하나가 null인 경우는 숫자형으로 변환하지 않는다.
=> undefined는 다른 값과 비교하면 안된다.
=> NaN이 피연산자인 경우 비교연산자는 항상 false를 반환한다.
from http://jjuunnjuning.tistory.com/76 by ccl(A) rewrite - 2021-11-04 01:27:59