자바스크립트에서 NaN은 비교연산자(==, ===, !=, !== 등) 으로 비교가 안된다. 왜냐하면 NaN은 자기자신과 비교해도 다르다고 하기 때문이다!! (https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/NaN)

 

NaN - JavaScript | MDN

전역 NaN 속성은 Not-A-Number(숫자가 아님)를 나타냅니다.

developer.mozilla.org

 

 

let temp = Number("안녕하세요");		// temp는 NaN이 된다.
temp === NaN 		// false!⚠️

 

자바스크립트는 자료형이 자꾸 바뀌어서 골치아픈데 NaN에서 직접비교하면 원하는 결과가 안나온다. 😭

NaN인제 체크하고 싶다면 함수를 사용하면된다!

또는 자기 자신과 다른지 체크하면 된다.. NaN은 유일하게 자기과 비교했을 때 다르다고 하는 값이다. 

function valueIsNaN(num) {
	return num !== num;		// NaN을 제외한 모든 값은 false, NaN만 유일하게 true로 나온다.
}

 

 

🌟  Object.is()

 

Object.is() 는 객체안의 두 값이 같은지 비교해주는 함수이다.

let isNaN = NaN;
Object.is(isNaN, NaN)	// true!

이 함수를 사용해서도 가능한데 MDN NaN문서에서는 isNaN() 함수를 추천해준다.

 

 

🌟 isNaN()

 

isNaN()Number.isNaN() 두가지 방법이 있는데 혼동해서는 안된다.

isNaN() 은 현재 값이 NaN이거나 숫자로 바꾸었을 때 NaN 인경우 true 이다.

Number.isNaN() 은 현재 값이 NaN 이어만 true 이다.

 

isNaN('NaN인가요?')	// true
Number.isNaN('NaN인가요?')	// false

 

NaN 인지 비교할 때 상황에 맞춰서 적절한 함수를 사용하면 될 것이다.