NaN

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

Property attributes of NaN
Writable no
Enumerable no
Configurable no

설명

NaN전역 객체의 속성입니다.

NaN의 초기값은 Not-A-Number, 즉 Number.NaN의 값과 같습니다. 최신 브라우저에서 NaN은 설정 불가, 쓰기 불가 속성입니다. 그렇지 않더라도 덮어쓰는건 피하는게 좋습니다.

프로그램에서 NaN이 등장하는건 드문 편이지만, Math 함수가 실패(Math.sqrt(-1))하거나 숫자 파싱 함수가 실패(parseInt("blabla"))하면 반환합니다.

NaN 판별

NaN은 다른 모든 값과 비교(==, !=, ===, !==)했을 때 같지 않으며, 다른 NaN과도 같지 않습니다. NaN의 판별은 Number.isNaN() 또는 isNaN()을 사용하면 제일 분명하게 수행할 수 있습니다. 아니면, 오로지 NaN만이 자기자신과 비교했을 때 같지 않음을 이용할 수도 있습니다.

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

그러나 isNaN()Number.isNaN()의 차이를 주의해야 합니다. isNaN은 현재 값이 NaN이거나, 숫자로 변환했을 때 NaN이 되면 참을 반환하지만, Number.isNaN은 현재 값이 NaN이어야만 참을 반환합니다.

isNaN('hello world'); // true
Number.isNaN('hello world'); // false

명세

명세 상태 설명
ECMAScript 1st Edition (ECMA-262) Standard 초기 정의. JavaScript 1.3에서 구현됨
ECMAScript 5.1 (ECMA-262)
The definition of 'NaN' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'NaN' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'NaN' in that specification.
Draft  

브라우저 호환성

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
NaNChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support

같이 보기