반응형

null과 undefined 간의 변환은 느슨한 동등 비교 == 이 암시적 강제변환을 하는 예이다.

ES5 에 아래와 같이 명시되어 있다고 한다.

x가 null이고 y가 undefined면 true를 반환한다.

x가 undefined이고 y가 null면 true를 반환한다.

null과 undefined를 느슨한 동등 비교(==)하면 서로에게 타입을 맞춘다.

-> null과 undefined는 느슨한 동등 비교 시 상호 간의 암시적인 강제변환이 일어나므로 비교 관점에서 구분이 되지 않는 값으로 취급된다.

'null <-> undefined' 강제변환은 안전하고 예측 가능하며, 어떤 다른 값도 비교 결과 긍정 오류(False Positive) 할 가능성이 없다. null과 undefined를 구분되지 않는 값들로, 결국 동일한 값으로 취급하는 강제변환은 권장된다.

null과 undefined 자신들끼리 비교 결과가 true이므로, 이외의 값들과 비교했을 때 결과값이 true일 가능성은 없다.

반응형
반응형

강제변환이 필요하다면 느슨한 동등 연산자 (===)를, 필요하지 않으면 엄격한 동등 연산자 (===)를 사용하자.

1. 비교하기 : 문자열 -> 숫자

2. 비교하기 : * -> 불리언

== 의 피연산자 한쪽이 불리언 값이면 예외 없이 그 값이 먼저 숫자로 강제변환된다.

절대로, 두번 다시 == true 혹은 == false 같은 코드는 쓰지 말자.

'사용하지 말자' 라고 이야기한 연산자는 == 이지, === 가 아니다. === true 혹은 === false 는 강제변환을 허용하지 않기에 ToNumber 강제변환은 신경쓰지 않아도 된다.

3. NaN , +0 , -0

NaN은 그 자신과도 결코 동등하지 않다.

+0와 -0는 동등하지 않다.

반응형