다른 연산자와 마찬가지로 비교 연산자 역시 값을 반환하는데, 반환값은 불린형이다.
true
가 반환되면, 긍정, 참, 사실을 의미하고false
가 반환되면, 부정, 거짓, 사실이 아님을 의미한다.alert( 2 > 1 ); // true
alert( 2 == 1 ); // false
alert( 2 != 1 ); // true
또 당연하게도 반환된 값은 변수에 저장해서 사용할 수 있다.
자바스크립트는 "사전" 순으로 문자열을 비교한다.
이 기준을 적용하면 사전 뒤쪽의 문자열은 사전 앞쪽의 문자열보다 크다고 판단한다. (정확히는 유니코드 순으로 비교)
alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
여기서 좀 어이가 없었는데, 자바스크립트는 비교하려는 값의 자료형이 다르면, 이 값을 숫자로 바꿔버린다.
alert( '2' > 1 ); // true, 문자열 '2'가 숫자 2로 변환된 후 비교가 진행됩니다.
alert( '01' == 1 ); // true, 문자열 '01'이 숫자 1로 변환된 후 비교가 진행됩니다.
불린값의 경우 true
는 1, false
의 경우 0으로 변환된 후 비교가 이루어 진다.
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!
먼저 0은 false고, "0"은 true다.
이전글에서 다뤄본것 처럼, 0은 Falsey값이고 "0"은 빈문자열이 아니기 때문에 Truthy 값이기 때문이지.
근데 "0"과 0을 == 연산자로 비교하게되면, 서로 다른 자료형이기 때문에 "0"을 숫자로 변환한 다음 비교하게되니 0 과 0 은 동일하기에 true가 된다. 허허허
동등연사자 ==
은 0
과 false
를 구분하지 못한다.
(그러겠지, 그니가 "0"하고 0이 똑같다 하겠찌;;ㅋㅋ)
alert( 0 == false ); // true
alert( '' == false ); // true
이런 문제가 발생하는 이유가 ==
연산자는 자료형이 다른 피연산자를 비교할때 숫자형으로 바꿔버리기 때문이다.
(false를 숫자로 하면 0이고, ""도 숫자로하면 0)
그러면 0하고 false는 어떻게 구별할 수 있느냐?
바로 일치연산자 ===을 사용하면 형변환 없이 값을 비교할 수 있다.
(이제야 왜 이걸 쓰는지 이해함!!)
따라서 ===을 사용하면 피연산자의 데이터 타입이 다를경우 즉시 false를 뱉어낸다. (!=대신 !== 사용하면 됨)