Number 메서드
- Number.toString()
- Number.parseInt()
- Number.isNaN()
let num = 10;
num.toString(); // string, '10'
num.toString(2); // string, '1010', 2진수
num.toString(8); // string, '12', , 8진수
num.toString(16); // string, 'a', ' 16진수
//12
Number.parseInt("12");
Number.parseInt(" 12"); //첫 문자에 있는 공백은 무시한다.
Number.parseInt("12.34"); //string의 진수를 나타내는 2부터 36까지의 정수입니다.
Number.parseInt("12문자열");
Number.parseInt("12 34"); // 문자열에 숫자가 여러 개 존재하면 첫 번째 숫자만 반환
// NaN
Number.parseInt("문자열 56")); // 첫 문자를 숫자로 변환할 수 없는 경우
이 메서드는 전역 함수인 parseInt() 함수와 완전히 같은 동작을 수행한다.
Number.parseInt === parseInt; // true
전달된 값(value)이 NaN(Not a Number)인지 아닌지를 검사하는 메서드
오직 숫자인 값에서만 동작한다
전달된 값이 NaN이면 true, 아니면 false.
즉, 숫자가 아니면 true, 숫자이면 false.
NaN이 NaN인지 계산할 때, 두 동일 연산자 ==과 === 모두 false로 평가되므로 값의 NaN 여부를 알아내려면 Number.isNaN()이 필요하다.
//true
Number.isNaN(NaN);
Number.isNaN(Number.NaN);
Number.isNaN(0 / 0)
//false
Number.isNaN("NaN");
Number.isNaN(undefined);
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");
둘은 비슷해 보이지만 isNaN()은 전역함수, Number.isNaN()은 데이터타입 Number의 메서드이다. 공통점은 주어진 값이 숫자인지 아닌지를 검사한다는 것이다.
//ture
isNaN(NaN);
isNaN(undefined);
isNaN({});
isNaN("123ABC");
//false
isNaN(true); // true는 숫자 1로 변환된다.
isNaN(null); // null은 숫자 0으로 변환된다.
isNaN(37);
isNaN("37"); // "37"은 NaN이 아닌 숫자 37로 변환된다.
isNaN(""); // 빈 문자열은 NaN이 아닌 0으로 변환된다
isNaN(" "); // 공백이 있는 문자열은 NaN이 아닌 0으로 변환된다.
아래 예를 보면,
// true : string 또한 검사가 가능하기 때문에 NaN이므로 true이다.
isNaN("Hello"));
//false : string은 검사 대상이 아니기 때문에 NaN임에도 불구하고 false이다.
Number.isNaN("Hello"));
"Hello"라는 값은 숫자가 아니기 때문에 true 아닌가?라고 생각할 수 있다.(사실 내가 그렇게 생각했다) 그러나 앞서 말했듯이 함수가 문자열도 숫자로 변환하여 검사한다는 문제점을 보완하기 위해 더 엄격한 버전으로 나온 것이기 때문에 오직 '숫자형(Number)'에서만 검사를 실행한다. "Hello"는 데이터타입이 string이기 때문에 애초에 검사 대상에서 제외돼서 false가 나오는 것이다.
결론: isNaN() 함수는 강제로 숫자로 변환하여 혼란을 야기할 위험이 있다. 따라서 요즘은 정확성 면에서 Number.isNaN()을 선호하는 것 같다.
출처: https://opentutorials.org/course/50/135
http://www.tcpschool.com/javascript/js_standard_numberMethod
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN
https://velog.io/@jykim/%EC%9B%90%EC%8B%9C%EA%B0%92%EC%9D%98-%EB%A9%94%EC%84%9C%EB%93%9C