불 값은 단순히
TRUE / FALSE
로 나누어 진다.
어떤 언어에서는 1을 TRUE로, 0을 FALSE로 대응시키는데, JS에서는 따로 TURE, FALSE가 존재한다. 문자열이 아니라서 따옴표를 사용하면 안된다.
typeof true
결과 : boolean
불 값으로 참, 거짓을 판단한다.
5>3
결과 : TRUE
5<=4
결과 : FALSE
NaN == NaN
결과 : FALSE
(NaN만 유일하게 비교연산자를 사용하여(!= 연산자 제외) 나(자기자신)와 나를 비교했을때, FALSE가 나온다.)
TRUE > FALSE
결과 : TRUE
숫자가 아니라고 그랬는데 비교가 되네. TRUE=1 / FALSE=0 이라고 생각하자. 자바스크립트의 단점.
근데, 자주 쓰다보면 신기하게도 외워짐.
'b' > 'a'
결과 : TRUE
사전 순.
특수문자도 가능.
ex) '&'.charCodeAt()
결과 : 65286
문자열과 숫자의 크기를 비교한다면?
ex) '3' < 5
결과 : TRUE
문자열 3을 숫자형 3으로 바꿔서 비교한다.
ex) 'abc' < 5
결과 : FALSE
문자열인 abc를 숫자형으로 바꾸면 NaN이 된다.
NaN과 5를 비교하여 FALSE가 된다.
현실세계와 안 맞는 것들이 너무 많다.
그런데, 잘 생각해보면 논리적인 이유가 있다.
예를 들어, 문자형과 숫자를 더할 때에는 문자열이 우선순위로서 전에 배웠던대로
ex) '수민이' + 0304
결과 : 수민이0304
0304가 문자열로 바뀌어 더해진다.
문자열과 숫자를 더하기를 제외한 연산 시, 이번 장과 같이 숫자가 아닌 것들을 숫자형으로 바꾸어 NaN이 되고 NaN과 어떠한 숫자던지 비교하면 FALSE가 된다.
ex) '1' == 1
결과 : TRUE
ex) 1 == TRUE
결과 : TRUE
이렇게 모양이 달라도 앞에서 배웠듯이 자동으로 형 변환하여 비교하기 때문에 TRUE가 나온다.
하지만, 대부분의 언어가 지원이 되지 않는 기능인 === 연산자는 값을 비교할 때 값 뿐만 아니라 자료형까지도 같은지 비교한다.
ex) '1' === 1
결과 : FALSE
ex) 1 === TRUE
결과 : FALSE
결론 ! 웬만하면 === 연산자를 사용하는 것이 낫다. 사람에게 좀 더 직관적이기 때문에.
추가
ex) 1 != '1'
결과 : FALSE
ex) 1 !== '1'
결과 : TRUE