비교 연산자

Yeom Jae Seon·2021년 2월 22일
0

JavaScript

목록 보기
5/6
post-thumbnail

불리언형 반환


비교연산자는 다른연산자와 마찬가지로 값을 반환하는데 값의 자료형은 불리언형이다.

2 > 1 // true
2 == 1 // false
2 < 1 // false

다른 값에도 비교연산자가 반환한 값을 할당가능!

const result = 2 > 1
console.log(result) // true

문자열 비교


'사전'순으로 문자열을 비교한다.
1. 문자열의 각 글자를 하나씩 비교하는데, 사전순으로 비교
2. 1이 모두 같은경우 문자열이 더 긴녀석을 더 크다고 결론 낸다.

'z' > 'a' // true
'abe' > 'abc' // true
'mechanic' > 'mechanical' // false

다른 형을 가진 값 간의 비교


지금까진 number는 number끼리, string은 string끼리 비교연산자로 비교해서 불리언값을 반환시켰지만 다른형에 대해선 비교연산자가 어떻게 동작하나..?

  • 비교하려는 값의 자료형이 다르면 자바스크립트는 이 값들을 숫자형으로 바꾼다.
'2' > 1 // true
'001' == 1 // true

boolean은 true는 1, false는 0으로 변환된 후 비교가 이루어진다.

true > false // true
true == 1 // true
false == 0 // true

'==='일치 연산자


==는 0과 false를 구별하지 못한다.
형이 다른 값에 대한 비교는 number로 변환한뒤 비교한다했으므로. 같은걸로 인식

그럼 어떻게 구별할수 있을까? 결국 '0'과 'false'는 형이 다른데.

=== 일치연산자를 사용한다!

  • 이를 사용하면 형변환 없이 값을 비교할수 있다.
  • 형변환 없이 값을 비교하므로 엄격한 동등연산자이다.
0 == false // true
0 === false // false
  • ===는 엄격하므로 에러 발생활 확률을 줄여준다.

null과 undefined 비교


null, undefined는 각각 개별적인 자료형이다.

  • ===를 사용하면 당연히 false, 형이 다르닌까.
null === undefined // false
  • 동등연산자 ==를 사용하면 true이다, null과 undefined는 둘이 있을 때 특별한 커플같아서 특별한 규칙이 적용돼 true가 반환된다. 둘이 각별하므로 다른 값에 대해선 false를 반환한다.
null == undefined // true
null == 0 // false
undefined == 0 // false
  • > < >= <=같은 이외의 비교연산자를 통해 null 과 undefined비교하면 둘다 형이 다르므로 숫자형으로 변환되어 비교된다. null은 0으로, undefined는 NaN으로 (NaN도 숫자형이다.)
null < 100 // true - null이 숫자 0으로 변환되어 비교됨
undefined > -1 // false - undefined는 NaN으로 변환되어 비교됨

예외 케이스들


  1. null vs 0
null > 0 // false, null은 숫자형으로 변환되고 0 > 0이므로 false
null == 0 // false
null >= 0 // true, null은 숫자형으로 변환되어 0 >= 0이므로 true

null >= 0true이면 null > 0null == 0중 하나가 true여야하는데 그렇지 않다.
두번째 null == 0을 살펴보면 null과 undefined는 서로를 ==로 비교하는거 아니면 전부 false를 반환한다.
즉, null과 undefined을 ==로 비교할 때만 true를 반환하고 그외의 경우 ex) null == 0, undefined == 0 같은 경우는 형변환이 되지않고 그냥 false를 리턴한다.

그렇기에 위의 결과가 나오는 것이다.

  1. 비교가 불가능한 undefined
undefind > 0 // false - 1)
undefined < 0 // false - 2)
undefined == 0 // false - 3)

1)의 경우는 형변환되면 NaN이므로 당연히 false고 2)의 경우도 동일하다.
3)의 경우는 null과같이 null과 비교하는게 아니면 형변환되지않고 무조건 false를 반환한다.

정리

  1. 비교 연산자는 불리언을 리턴한다.
  2. 문자열 비교는 '사전'순, 그 후순위로는 문자열 길이
  3. 서로 다른 형에 대한 비교는 '숫자형'으로 변환되고 비교가 이루어진다. (null, undefined ==제외)
  4. null과 undefined는 ==로 비교시 true지만 자기들 끼리 ==하는거 아니면 전부 false 반환
  5. null이나 undefined가 올수도 있는 변수를 < >의 피연산자로 올때는 주의를 해야한다. null일때와 undefined일 때의 결과가 다를 수도 있기 때문이다.

0개의 댓글