-말도안되는 경우-
undefined < null // false
undefined > null // false
undefined === null // false
NaN === NaN // false
NaN !== NaN // true
"11" < "2" // true
"2" < 5 // true
5 < "11" // true
===와 !== 는 양쪽 피연산자가 NaN인 경우를 제외하면 기대한 대로 동작한다. ===와 !==는 값이 null이거나 undefined거나, 아무튼 NaN이 아닌 다른 값인지를 검사하기 위해 쓸 수 있다. Value가 NaN인지 확인하려면 반드시 Number.isNaN(value)를 써야한다.
반복문의 종료 조건을 검사하기 위해 === 연산자를 사용하고 싶다면 종료 조건을 나타내는 변수 값이 안전한 정수 범위 안에 있는 경우만 사용해야한다. 안전한 볌위 안이라고 해도 ===보다는 >= 연산자가 더 안전하다.
비교 연산자 역시 양쪽 피연산자가 둘다 문자열이거나 둘 다 숫자이면 제대로 동작한다. 그 외의 경우는 말도 안되는 결과가 나온다. 그러므로 비교 연산을 할 때는 자료형을 섞어 쓰면 안된다. 자바스크립트는 자료형을 섞어 쓰는 것을 어떤 형태로든 막지 않기 때문에 알아서 규칙을 만들어야 한다.
자바스크립트에는 신뢰해서는 안 될 비교 연산자가 있다. 특히 !=와 == 는 절대 사용하지 않길 권장한다. 거짓 양성(false positives)과 거짓 음성(false negatives)이 발생할 수 있다. 그 대신 꼭 ===와 !==를 사용해야 한다.
- if 문의 조건문 위치
- while 문의 조건문 위치
- for 문의 조건문 위치
- do 문의 조건문 위치
- ! 연산자의 피연산자 위치
- && 연산자의 양쪽 피연산자
- || 연산자의 양쪽 피연산자
- ?와 : 로 구성된 삼항 연산자의 첫 번째 피연산자 위치 (? 앞)
- Array 의 filter, find findIndex, indexOf 메서드의 첫번째 인자로 전달되는 함수의 반환값
잘 설계된 언어라면 이런 위치에서는오직 불 값만 사용하도록 할 것이다 하지만 자바스크립트는 여기에 아무 값이나 사용하도 된다. 이런 언어의 모든 값은 ‘불인척하는’ 자료형에 포한된다. ‘불인 척하는’ 자료형에 속한 값은 ‘참일고 볼수 있는 값(truthy)’ 이거나 ‘거짓이라고 볼 수 있는 값(falsy)’ 둘중에 하나이다.
거짓이라고 볼 수 있는 값은 다음과 같다.
- false
- null
- undefined
- “”
- 0
- NaN 다른 모든 값은 ‘참이라고 볼 수 있는 값’에 해당한다. 여기에는 빈 객체, 빈 배열, 그리고 언뜻 보면 ‘거짓이라고 볼 수 잇는 값’ 처럼 보이는 ‘false’나 ‘0’같은 문자열이 포함된다.
그러므로 조건문은 true이거나 false여야 하고, 다른 값들은 반드시 에러로 간주되어야 한다.
#HowJavaScriptWorks #HowJavaScriptWorks/boolean