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

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

Number.isNaN(1) // true
Number.isNaN('1') // false

바로 Number.isNaN이다.

 

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

여기서 숫자는 integer 값이다.

 

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

Number.isNaN(10.1) // false

 

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

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이 있음을 체크하는 것도 주의해야한다.

 

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인덱스를 찾아야한다.

'개발 > 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
profile on loading

Loading...