비교연산자는 다른연산자와 마찬가지로 값을 반환하는데 값의 자료형은 불리언형이다.
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는 각각 개별적인 자료형이다.
===
를 사용하면 당연히 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으로 변환되어 비교됨
null > 0 // false, null은 숫자형으로 변환되고 0 > 0이므로 false
null == 0 // false
null >= 0 // true, null은 숫자형으로 변환되어 0 >= 0이므로 true
null >= 0
이 true
이면 null > 0
과 null == 0
중 하나가 true
여야하는데 그렇지 않다.
두번째 null == 0
을 살펴보면 null과 undefined는 서로를 ==
로 비교하는거 아니면 전부 false를 반환한다.
즉, null과 undefined을 ==
로 비교할 때만 true
를 반환하고 그외의 경우 ex) null == 0
, undefined == 0
같은 경우는 형변환이 되지않고 그냥 false
를 리턴한다.
그렇기에 위의 결과가 나오는 것이다.
undefind > 0 // false - 1)
undefined < 0 // false - 2)
undefined == 0 // false - 3)
1)의 경우는 형변환되면 NaN이므로 당연히 false고 2)의 경우도 동일하다.
3)의 경우는 null과같이 null과 비교하는게 아니면 형변환되지않고 무조건 false
를 반환한다.
==
제외)==
로 비교시 true지만 자기들 끼리 ==
하는거 아니면 전부 false 반환< >
의 피연산자로 올때는 주의를 해야한다. null일때와 undefined일 때의 결과가 다를 수도 있기 때문이다.