알쏭달쏭 자바스크립트 비교연산자

박재현·2024년 2월 28일
1

JavaScript 공부

목록 보기
7/14

불린형 반환

다른 연산자와 마찬가지로 비교 연산자 역시 값을 반환하는데, 반환값은 불린형이다.

  • 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

0과 "0" 비교

내가 여기서 멘탈이 좀 너덜너덜 해졌는데, 이제 좀 이해가 간다.

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가 된다. 허허허


일치 연산자

동등연사자 ==0false를 구분하지 못한다.
(그러겠지, 그니가 "0"하고 0이 똑같다 하겠찌;;ㅋㅋ)

alert( 0 == false ); // true
alert( '' == false ); // true

이런 문제가 발생하는 이유가 == 연산자는 자료형이 다른 피연산자를 비교할때 숫자형으로 바꿔버리기 때문이다.
(false를 숫자로 하면 0이고, ""도 숫자로하면 0)

그러면 0하고 false는 어떻게 구별할 수 있느냐?
바로 일치연산자 ===을 사용하면 형변환 없이 값을 비교할 수 있다.
(이제야 왜 이걸 쓰는지 이해함!!)

따라서 ===을 사용하면 피연산자의 데이터 타입이 다를경우 즉시 false를 뱉어낸다. (!=대신 !== 사용하면 됨)


참고

profile
기술만 좋은 S급이 아니라, 태도가 좋은 A급이 되자

0개의 댓글

관련 채용 정보