첫번째 질문:

NaN == NaN // false

모든 것은 이 코드에서 부터 시작이 됐다.

ChatGPT의 답변

NaN == NaN이 false를 반환하는 이유는 다음과 같습니다:

  1. NaN의 정의: NaN은 숫자가 아닌 값을 나타내기 위해 사용됩니다. 이 값은 자신과도 같지 않은 유일한 값입니다.
  1. IEEE 754 표준: IEEE 754 표준에 따르면, NaN과 관련된 모든 비교 연산은 false를 반환해야 합니다. 이는 NaN이 정렬되지 않은 값으로 간주되기 때문입니다. 두 개의 정의되지 않은 값이 동일하다고 말하는 것은 의미가 없기 때문에, NaN은 자신과도 같지 않다고 정의됩니다.
  1. JavaScript 사양: ECMAScript 사양(JavaScript를 정의하는 표준)은 IEEE 754 표준을 따릅니다. 따라서 JavaScript에서는 NaN == NaN이 false를 반환하도록 정의되어 있습니다.

--> JavaScript에서 값이 NaN인지 확인하려면 isNaN 함수 또는 Number.isNaN 함수를 사용해야 합니다:

  • isNaN(value): 이 함수는 값을 숫자로 변환한 후 테스트하기 때문에 비수치 문자열에 대해 예상치 못한 결과를 반환할 수 있습니다.
  • Number.isNaN(value): 이 함수는 값이 실제로 NaN인지를 확인하는 데 더 정확합니다.
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log(isNaN(NaN)); // true
console.log(Number.isNaN(NaN)); // true

두번째 질문: isNaN() 과 Number.isNaN()의 차이

ChatGPT의 답변

isNaNNumber.isNaN은 둘 다 JavaScript에서 NaN(Not-a-Number)을 검사하는 데 사용되지만, 이 두 함수는 작동 방식에 중요한 차이점이 있습니다.

isNaN 함수

isNaN 함수는 주어진 값을 숫자로 변환한 후, 변환된 값이 NaN인지 검사합니다. 이 때문에, isNaN 함수는 숫자가 아닌 값을 입력받았을 때도 true를 반환할 수 있습니다. 예를 들어, 문자열이 숫자로 변환될 수 없을 때 isNaNtrue를 반환합니다.

console.log(isNaN(NaN)); // true
console.log(isNaN("Hello")); // true, "Hello"는 숫자가 아니므로 NaN으로 간주
console.log(isNaN(undefined)); // true, undefined는 숫자가 아니므로 NaN으로 간주
console.log(isNaN(123)); // false, 123은 숫자이므로 NaN이 아님

Number.isNaN 함수

Number.isNaN 함수는 값이 정확히 NaN인지를 검사합니다. 이 함수는 값의 형 변환을 수행하지 않기 때문에, 실제로 NaN인 경우에만 true를 반환합니다. 따라서, 입력값이 숫자로 변환되지 않으면 false를 반환합니다.

console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("Hello")); // false, "Hello"는 NaN이 아님
console.log(Number.isNaN(undefined)); // false, undefined는 NaN이 아님
console.log(Number.isNaN(123)); // false, 123은 NaN이 아님

요약

  • isNaN(value): 값이 숫자로 변환될 때 NaN이 되는지를 검사합니다. 이로 인해 숫자가 아닌 문자열이나 다른 비수치값도 true를 반환할 수 있습니다.
  • Number.isNaN(value): 값이 정확히 NaN인지를 검사합니다. 형 변환을 하지 않기 때문에 실제로 NaN인 경우에만 true를 반환합니다.

--> 이러한 차이로 인해 Number.isNaN 함수가 NaN 값을 정확하게 검사하는 데 더 적합합니다.

오늘의 결론

  • isNaN()은 숫자가 아니면 대부분의 경우에 true를 반환한다
  • Number.isNaN()은 NaN이 아니면 다 false를 반환한다
    값이 정말 NaN 그 자체인지 알고 싶을때는 Number.isNaN()을 쓰자~!
  • 비수치 문자열은 isNaN()에서는 true고, Number.isNaN()에서는 false 이다

+ ...근데 typeof NaN'number' 입니다...ㅎㅎㅎ
++ 참고

console.log(isNaN("Hello"));  // true, "Hello"는 숫자가 아니므로 NaN으로 간주
console.log(isNaN(123));      // false, 123은 숫자이므로 NaN이 아님
console.log(isNaN("123"));    // false, "123"은 숫자로 변환될 수 있음
console.log(isNaN(NaN));      // true, NaN은 NaN임
console.log(isNaN(undefined));// true, undefined는 숫자가 아니므로 NaN으로 간주
console.log(isNaN(null));     // false, null은 0으로 변환되므로 NaN이 아님
console.log(isNaN(true));     // false, true는 1로 변환되므로 NaN이 아님
console.log(Number.isNaN("Hello"));  // false, "Hello"는 NaN이 아님
console.log(Number.isNaN(123));      // false, 123은 NaN이 아님
console.log(Number.isNaN("123"));    // false, "123"은 NaN이 아님
console.log(Number.isNaN(NaN));      // true, NaN은 NaN임
console.log(Number.isNaN(undefined));// false, undefined는 NaN이 아님
console.log(Number.isNaN(null));     // false, null은 NaN이 아님
console.log(Number.isNaN(true));     // false, true는 NaN이 아님
profile
오늘도 한 걸음씩 나아가기

0개의 댓글