null - 파이썬에서의 None, C++ 에서의 nullptr 과 같음



undefined - 초기화된 적이 없다. 이전에 값이 있었는지 없었는지도 모르는 null 과는 다름. (예: 객체에서 없는 프로퍼티를 불러오면 undefined를 반환)


>> 따라서 undefined === null 하면 false 를 반환한다.

>> 그러나 undefined == null 하면 true 를 반환한다.

>> 그런데 null 을 숫자로 바꾸면 0이지만 undefined를 숫자로 바꾸면 NaN 이다.

>> 따라서 new Number(null) == new Number(undefined) 는 false 를 반환한다.


NaN - 숫자가 아니라는 뜻. 숫자가 들어가야 하는 부분에 다른 값이 들어간다면 NaN으로 치환된다.


>> 그런데 이 미친새끼는 NaN === NaN 하면 false 를 반환한다 (숫자가 아닐 뿐 이론적으로는 다른 값이므로)

>> 따라서 NaN 은 isNaN() 을 써야만 확인할 수 있다

>> typeof(NaN) 은 number 를 반환한다

>> isNaN() 에 다른 객체나 문자열 등, 숫자가 아닌 아무거나 넣어도 true를 반환한다. 숫자가 아니니까...



정신 나갈거 같애!!!