자바스크립트에서 0 / 0이 NaN(Not-a-Number)으로 평가되는 이유는 수학적으로 정의되지 않은 연산이기 때문입니다. 이 현상은 IEEE 754 표준을 따르는 자바스크립트의 숫자 연산 방식에서 비롯됩니다.
IEEE 754 표준
자바스크립트의 숫자 연산은 IEEE 754 부동소수점 표준을 따릅니다. 이 표준은 몇 가지 특수한 값들을 정의하고, 특정 연산의 결과로 이러한 값들을 반환하도록 규정하고 있습니다. 그 중 하나가 NaN입니다. NaN은 "숫자가 아님"을 의미하며, 수학적으로 정의되지 않은 연산이나 부정확한 연산의 결과로 반환됩니다.
수학적으로 정의되지 않은 연산
0으로 나누는 것은 수학적으로 정의되지 않았습니다. 0 / 0 연산은 어떤 수로도 정의될 수 없으므로, 자바스크립트는 NaN을 반환합니다. 이는 다른 프로그래밍 언어에서도 유사하게 처리됩니다.
예시 코드
console.log(0 / 0); // 출력: NaN
추가적인 NaN 사례
자바스크립트에서 NaN을 반환하는 다른 연산도 있습니다. 예를 들어, 숫자가 아닌 값을 숫자로 변환하려고 할 때, 정의되지 않은 수학 연산을 수행할 때 등입니다.
console.log(Math.sqrt(-1)); // 출력: NaN (음수의 제곱근)
console.log(parseInt("hello")); // 출력: NaN (문자열을 정수로 변환 시도)
console.log(undefined + 1); // 출력: NaN (undefined와의 연산)
NaN 확인 방법
자바스크립트에서 값이 NaN인지 확인하려면 Number.isNaN 메서드를 사용할 수 있습니다. 이 메서드는 주어진 값이 NaN인 경우에만 true를 반환합니다.
console.log(Number.isNaN(0 / 0)); // 출력: true
console.log(Number.isNaN(NaN)); // 출력: true
console.log(Number.isNaN('NaN')); // 출력: false (문자열 'NaN'은 NaN이 아님)
Number.isNaN을 사용하는 것이 더 안전합니다. 이는 전역 isNaN 함수와는 다르게, 숫자로 강제 변환되지 않는 경우에만 NaN을 반환하기 때문입니다.
전역 isNaN 함수와 Number.isNaN 메서드 비교
전역 isNaN 함수는 전달된 값을 숫자로 강제 변환한 후, 그 결과가 NaN인지를 검사합니다. 이로 인해, 숫자가 아닌 값도 true로 평가될 수 있습니다.
console.log(isNaN('hello')); // 출력: true ('hello'는 숫자가 아님)
console.log(Number.isNaN('hello')); // 출력: false ('hello'는 NaN이 아님)
따라서, 값이 정확히 NaN인지를 검사할 때는 Number.isNaN 메서드를 사용하는 것이 좋습니다.
이와 같이, 0 / 0이 NaN으로 평가되는 이유는 수학적으로 정의되지 않은 연산을 처리하기 위한 IEEE 754 표준에 따른 자바스크립트의 숫자 연산 방식 때문입니다. NaN은 다양한 상황에서 반환될 수 있으며, Number.isNaN 메서드를 사용하여 정확하게 검사할 수 있습니다.
'IT' 카테고리의 다른 글
쿠버네티스 메모리 축약 표현하기 (0) | 2024.05.29 |
---|