Thief of Wealth
Published 2021. 3. 1. 00:20
[Javascript] NaN 개발/Javascript

자바스크립트에는 Not a Number를 체크할 수 있는 방법이 있는데,

<javascript />
Number.isNaN(1) // true Number.isNaN('1') // false

바로 Number.isNaN이다.

 

인수로 숫자가 아닌값이 들어오면 false를 리턴한다.

여기서 숫자는 integer 값이다.

 

다음과 같이 실수가 들어와도 false를 리턴한다.

<javascript />
Number.isNaN(10.1) // false

 

다음과 같은 재미있는 특성도 있다. (자기자신이 다르다는데 맞다고 하는게 NaN이다.)

<javascript />
var a = NaN; a !== a; // true var b = "foo"; b !== b; // false var c = undefined; c !== c; // false var d = {}; d !== d; // false var e = { valueOf: "foo" }; e !== e; // false

 

배열 속에 NaN이 있음을 체크하는 것도 주의해야한다.

 

<javascript />
let arr = ["1", "2", "3", "4", NaN, "5"]; print(arr.indexOf(NaN)); // -1 print(arr.includes(NaN)); // true print(arr.findIndex((n) => Number.isNaN(n))); // 4

 

분명히 NaN에 대한 인덱스를 찾고 싶어서 indexOf를 사용했는데, 찾을 수 없다고 나온다.

그래서 arr이 NaN을 포함하고 있냐고 물었더니 true랜다.

있는데 없다?

 

이러한 현상이 생기는 이유는 indexOf와 includes는 equality 알고리즘을 서로 다른 것을 사용하기 때문이다.

indexOf 는 strict equality를 사용하고,

includes는 same value zero 알고리즘을사용함

 

그래서 includes와 같은 알고리즘을 사용하는 findIndex를 사용해서 NaN인덱스를 찾아야한다.

한번 누르면 2시간동안 보이지 않아요 ㅎㅎ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
원치 않을 경우 를 눌러주세요

'개발 > Javascript' 카테고리의 다른 글

[Javascript] 얕은복사 vs 깊은복사  (0) 2021.03.01
[Javascript] Class ToString  (0) 2021.03.01
javascript 시간 측정하기  (0) 2021.02.15
[Javascript] 클로저  (0) 2021.01.22
[Javascript] slice, substring, substr 함수의 차이점  (0) 2021.01.22