Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015년 7월.
isNaN() 함수는 어떤 값이 NaN인지 판별합니다. isNaN 함수는 몇몇 혼란스러운 케이스을 가지고 있으므로, ECMAScript 2015에서 추가한 Number.isNaN()으로 바꾸는 편이 좋을 수도 있습니다.
테스트되는 값.
주어진 값이 NaN이면 true, 아니면 false.
JavaScript의 다른 모든 값과 달리, NaN은 같음 연산(==, ===)을 사용해 판별할 수 없습니다. NaN == NaN, NaN === NaN은 false로 평가되기 때문입니다. 그래서 NaN을 판별하는 함수가 필요합니다.
NaN 값은 산술 연산이 정의되지 않은 결과 또는 표현할 수 없는 결과를 도출하면 생성되며, 반드시 오버플로 조건을 나타내는 것은 아닙니다. 숫자가 아닌 값의 변환을 시도했으나 알맞은 원시 숫자 값이 없는 경우의 결과도 NaN입니다.
예를 들어 0을 0으로 나누면 NaN이지만, 다른 수를 0으로 나누면 그렇지 않습니다.
isNaN 함수 스펙의 아주 초기 버전 이후로, 숫자 아닌 인수를 위한 행동이 혼란스럽습니다. isNaN 함수의 인수가 Number 형이 아닌 경우, 그 값은 먼저 숫자로 강제됩니다. 결과값은 그 뒤에 NaN인지 결정하기 위해 테스트됩니다. 따라서 숫자 형으로 강제된 결과 유효한 비 NaN 숫자값(특히 강제될 때 숫자값이 0 또는 1을 주는 빈 문자열 및 불린 원시형)이 되는 비 숫자의 경우, "false" 반환값은 예기치 않을 수 있습니다; 예를 들어 빈 문자열은 분명히 "not a number"입니다. 혼란(confusion)은 용어 "not a number"가 IEEE-754 부동 소수점 값으로 표현된 숫자에 특정 의미가 있다는 사실에서 생깁니다. 함수는 "이 값이, 숫자값으로 강제되는 경우, IEEE-754 'Not A Number' 값인가?"라는 질문에 답하는 것으로 해석되어야 합니다.
ECMAScript (ES2015) 최근 버전은 Number.isNaN() 함수를 포함합니다. Number.isNaN(x)는 x가 NaN인지 아닌지 테스트하는 믿을 수 있는 방법이 됩니다. 그러나 Number.isNaN으로도, NaN의 의미는 정확한 숫자 의미로 남아있고 단순히 "not a number"는 아닙니다. 그 대신에, Number.isNaN이 없을 경우에, 식 (x != x)은 변수 x가 NaN인지 아닌지 테스트하는 더 믿을 수 있는 방법입니다, 그 결과는 isNaN을 믿을 수 없게 하는 오탐(false positive)의 대상이 아니기에.
당신은 isNaN을 다음과 같이 생각할 수 있습니다:
isNaN()을 고려한 더 용도 중심 방법이 있습니다: isNaN(x)가 false를 반환하면, 그 식이 NaN을 반환하게 하지 않고 산술 식에 x를 쓸 수 있습니다. true를 반환하는 경우, x는 모든 산술 식이 NaN을 반환하게 합니다. 이는 JavaScript에서, isNaN(x) == true가 NaN을 반환하는 x - 0과 동일함(JavaScript에서 x - 0 == NaN가 항상 거짓을 반환하여 그것을 테스트할 수 없지만)을 뜻합니다. 실제로, isNaN(x), isNaN(x - 0), isNaN(Number(x)), Number.isNaN(x - 0) 및 Number.isNaN(Number(x))는 항상 같은 값을 반환하며 JavaScript에서 isNaN(x)는 그저 이러한 각각의 조건(terms)을 표현하는 가장 짧은 형태입니다.
예를 들어 함수에 인수가 산술 처리 가능한(숫자 "처럼" 쓸 수 있는)지를 테스트하기 위해 사용할 수 있습니다, 그렇지 않은 경우 기본 값 또는 다른 무언가를 제공해야 합니다. 이런 식으로 문맥에 따라 암시적인 값 변환을 제공하는 JavaScript의 다양성(versatility) 전체를 이용케 하는 함수를 가질 수 있습니다.
| ECMAScript® 2027 Language Specification # sec-isnan-number |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025년 4월 13일 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.