✏️ NaN (Not a Number)

 

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

 

function sanitise(x) {
  if (isNaN(x)) {
    return NaN;
  }
  return x;
}

console.log(sanitise('1'));
// Expected output: "1"

console.log(sanitise('NotANumber'));
// Expected output: NaN

NaN을 반환하는 연산에는 다섯 가지 종류가 있습니다.

 

  • 숫자로 변환 실패 (예시: parseInt("blabla"), Number(undefined)와 같은 명시적인 것 또는 Math.abs(undefined)와 같은 암시적인 것)

 

  • 결과가 허수인 수학 계산식 (예시: Math.sqrt(-1))

 

  • 정의할 수 없는 계산식 (예시: 0 * Infinity, 1 ** Infinity, Infinity / Infinity, Infinity - Infinity)

 

  • 피연산자가 NaN이거나 NaN으로 강제 변환되는 메서드 또는 표현식 (예시: 7 ** NaN, 7 * "blabla") - 이것은 NaN이 전염성 있다는 것을 의미합니다.

 

  • 유효하지 않은 값이 숫자로 표시되는 기타 경우 (예시: 잘못된 날짜 new Date("blabla").getTime(), "".charCodeAt(1))

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/NaN

 

NaN - JavaScript | MDN

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

developer.mozilla.org

 


✏️ isNaN()

 

NaN은 “==”, “!=” 연산자로 판별할 수 없다.값이 NaN인지 확인하려면, Number.isNaN() 또는 isNaN()를 사용하여 값이 NaN인지 여부를 확인 할 수 있습니다. 또는 NaN은 자신과 같지 않다고 비교되는 유일한 값이므로 x !== x와 같은 자체 비교를 수행할 수 있습니다.

 

 
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



같은 이유로 BigInt 값을 사용하면 Number.isNaN()이 아닌 isNaN()에서 오류가 발생합니다.

 

 
isNaN(1n); // TypeError: Conversion from 'BigInt' to 'number' is not allowed.
Number.isNaN(1n); // false

 

또한 일부 배열 메서드는 NaN을 찾을 수 없는 반면에 다른 배열 메서드들은 찾을 수 있습니다. 즉, (indexOf(), lastIndexOf())는 NaN을 찾을 수 없지만, includes()는 값을 찾을 수 있습니다.

 

 
const arr = [2, 4, NaN, 12];
arr.indexOf(NaN); // -1
arr.includes(NaN); // true

// 적절하게 정의된 조건자를 허용하는 메서드는 항상 NaN을 찾을 수 있습니다.
arr.findIndex((n) => Number.isNaN(n)); // 2

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/isNaN

 

isNaN() - JavaScript | MDN

isNaN() 함수는 어떤 값이 NaN인지 판별합니다. isNaN 함수는 몇몇 혼란스러운 케이스을 가지고 있으므로, ECMAScript 2015에서 추가한 Number.isNaN()으로 바꾸는 편이 좋을 수도 있습니다.

developer.mozilla.org

 

'IT > JavaScript' 카테고리의 다른 글

[JS] ✏️ Infinity / ifFinite()  (0) 2023.07.17
[JS] ✏️ Nullish (??)  (0) 2023.07.17
[JS] ✏️ Logical AND(&&) & OR( | | )  (0) 2023.07.17
[JS] ✏️ Truthy && Falsey  (0) 2023.07.17
[JS] ✏️ eval(), JSON.parse(), JSON.stringify()  (0) 2023.07.17

+ Recent posts