기본적인 연산 (더 밑에 추가로 설명할 것)
- 큼 작음: a>b, a<b
- 같거나 큼, 작거나 같음: a>=b, a<=b
- 같음: a == b (a=b는 할당이다)
- 같지 않음: a!=b
불린형 반환
비교 연산자 역시 값을 반환
alert( 2 > 1 ); // true
alert( 2 == 1 ); // false
alert( 2 != 1 ); // true
let result = 5>4;
alert(result); // true, 불린값도 다른 값처럼 변수 할당 가능
문자열 비교
JS는 사전 순으로 문자열을 비교. (정확히는 사전순이 아니라 유니코드 순)
alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
문자열 비교 시 알고리즘
- 두 스트링의 첫 글자 비교
- 첫 글자가 같으면 두번째 글자를 같은 방식으로 비교
- 끝날 때까지 비교
- 비교가 종료되었는데 길이가 다르면 더 긴 문자열이 크다고 결론
다른 타입을 가진 값들의 비교
타입이 다르면 JS는 값들을 넘버 타입으로 바꿉니다
alert( '2' > 1 ); // true, 문자열 '2'가 숫자 2로 변환된 후 비교가 진행됩니다.
alert( '01' == 1 ); // true, 문자열 '01'이 숫자 1로 변환된 후 비교가 진행됩니다.
alert( true == 1 ); // true
alert( false == 0 ); // true
일치 연산자
동등 연산자 ==는 0과 false를 구별하지 못합니다.
alert( 0 == false ); // true false를 넘버 타입으로 바꿔서
alert( '' == false ); // true ''은 0으로 바뀌고 false도 똑같이
alert( 0 === false ); // false, 피연산자의 형이 다르기 때문입니다.
하지마 일치 연산자인 ===는 타입 변환 없이 값을 비교 가능
이건 strict한 동등 연산자이넫 타입 종류의 동등 여부까지 검사하기에
a와 b의 타입이 다르면 a===b는 즉시 false를 반환
null과 undefined의 비교
두 값의 자료형이 다르기 때문에 일치 연산자 ===로 비교 시 거짓이 반환
하지만 동등연산자==를 사용하여 비교하게 되면 특별한 규칙이 적용돼 true 반환
이 둘을 각별한 사이로 취급하기에 이렇지만 다른 값들끼리와는 안된다.
null vs 0
alert( null > 0 ); // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true
3이 true이면 위에 두개 중 하나는 true이어야 할텐데 왜 이렇게 나올까?
이유는 셋의 연산자가 작동하는 방식이 다르기 때문인데
1과 3에서 기타비교 연산자 >, <, <=, >= 의 동작 방식이 다르기 때문인데
이에 따라 null이 넘버타입인 0으로 변환되기 때문
하지만 2번의 경우 동등 연산자 ==는 null일 때 타입 변환을 하지 않음(undefined도)
위에 언급했던 것 처럼 null과 undefined의 경우에만 true를 반환하고 다른건 무조건 false
undefined 는 비교불가
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)
당연해보이지만 이유를 좀 더 설명해보자면
- 1,2에선 undefined가 NaN으로 변환되는데 이는 항상 비교가 안되어 false를 반환
- undefined는 null이나 undefined끼리만 true를 내뱉고 이외엔 전부 false
5 > 4 // true
"apple" > "pineapple" // false
"2" > "12" // true, string이기에 사전 순
undefined == null // true
undefined === null // false 타입 달라서
null == "\n0\n" // false null은 undefined끼리만 true
null === +"\n0\n" //false 타입이 달라서
'JavaScript > Basics' 카테고리의 다른 글
[JavaScript] 논리 연산자 (0) | 2022.03.10 |
---|---|
[JavaScript] if와 '?'를 사용한 조건 처리 (0) | 2022.03.09 |
[JavaScript] 기본 연산자와 수학 (0) | 2022.03.09 |
[JavaScript] 형 변환 (0) | 2022.03.09 |
[JavaScript] 브라우저에서 유저와 상호작용이 가능한 함수 (alert, prompt, confirm) (0) | 2022.03.09 |