
NaN을 비꼬는 밈

콘솔에서 출력한 typeof NaN. 결과는 number다.
자바스크립트의 NaN은 ‘Not-a-Number’라는 의미입니다. 즉 ‘숫자가 아님’이란 뜻인데, 막상 typeof NaN을 찍어보면 number 가 출력됩니다. 이 혼란스러운 결과로 인해 개발자들 사이에서는 이를 비꼬는 밈들이 생겨났습니다.
자바스크립트에서는 왜 이런 어처구니없는 결과가 나올까요?

“NaN에 대해 알려면 자바스크립트에서 숫자가 무엇인지부터 정의해야 해요.” - 궤도님
NaN에 대해서 알아보기 위해 앞서, 일단 자바스크립트에서 “숫자”가 정확히 어떻게 정의되어 있는지 알아봅시다.
ECMAScript 사양에 따르면 숫자는 단 하나의 Number Type으로 표현됩니다. int, long, float, double과 같이 정수/실수, 크기 등에 따라 숫자 타입이 구분되어 있는 다른 언어와는 다르죠. 또한, 자바스크립트의 숫자 타입 값은 IEEE 754에서 정의된 배정밀도 64비트 부동소수점 형식을 따릅니다. 즉, 자바스크립트에서 모든 숫자는 실수로 처리하며, 정수만을 표현하기 위한 데이터 타입이 별도로 존재하지 않습니다. 자바스크립트를 사용할 때, 정수처럼 보이는 숫자들은 사실은 죄다 실수 형태로 저장되어 있는 것이죠.
NaN은 Number Type에서 정의된 특별한 값 중 하나입니다. 더 정확히 말하면, 64비트 실수 범위 안에 존재하는 9,007,199,254,740,990개 (2⁵³ - 2)의 NaN(Not-a-Number) 값들을 하나의 특별한 NaN 이라는 값으로 표현합니다.






