Number
작성
parseInt, parseFloat
parseInt():number,parseFloat():number
parseInt('20.6'); //20
parseFloat('20.6'); //20.6
1. Number.prototype.toFixed() :string
- 숫자를 소수점 몇 번째까지 나타낼 지 결정한다.
- 문자열을 리턴한다.
2. window.NaN: 전역 객체의 속성, 전역 스코프의 변수
(1) typeof NaN = number
NaN의 타입은number이다.
(2) NaN을 반환하는 다섯 가지 연산
- 숫자로서 읽을 수 없음
ex) parseInt("문자열"), Number(undefined) - 결과가 허수인 수학 계산식
ex) Math.sqrt(-1) - 피연산자가 NaN
ex) 7 ** NaN - 정의할 수 없는 계산식
ex) 0 * Infinity, 0 / 0 - 문자열을 포함하면서 덧셈이 아닌 계산식
ex) "가" / 3
(3) isNaN()
- 인수가
Number형이 아닌 경우, 그 값은 먼저 숫자로 형 변환 후,isNaN(arg) => Number(arg),NaN인지 판별하기 때문에 예상치 못한 결과를 내기도 한다.
// return true: NaN 이다!
isNaN('abc'); // Number("asd")는 NaN 반환
isNaN('123ABC'); // parseInt("123ABC")는 123이지만 Number("123ABC")는 NaN을 반환
isNaN(NaN); // 참
isNaN(undefined); // Number(undefined)가 NaN을 반환하기 때문
isNaN({}); // Number({})는 NaN을 반환
// return false: 숫자다!
isNaN(37); // false
isNaN(''); // Number("")는 0을 반환
isNaN(' '); // Number(" ")는 0을 반환
isNaN(true); // Number(true)는 1을 반환
isNaN(false); // Number(true)는 0을 반환
isNaN(null); // Number(null)은 0을 반환
isNaN([]); // Number([])은 0을 반환
(4) Number.isNaN()
isNaN()함수의 더 엄격한 버전이다.Number.isNaN()은 강제로 매개변수를 숫자로 변환하지 않고, 주어진 값의 타입이 Number && 값이 NaN이면true, 아니면false를 반환한다.Number.isNaN()는 타입이 Number 인지 체크하는 것을 보면,isNaN()함수에 비해 그냥 숫자인지 아닌지를 확인하는 것보다, 정상적인 연산이 안되는 경우를 확인하는 맥락이 더 강하게 느껴진다.
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
Number.isNaN('가' / 3); // true
Number.isNaN('3' / 3); // false "3"은 산술연산시 숫자 3으로 계산이 된다.
Number.isNaN(true); // false
Number.isNaN(null); // false
Number.isNaN(37); // false
Number.isNaN('37'); // false
Number.isNaN('37.37'); // false
Number.isNaN(''); // false
Number.isNaN(' '); // false
// isNaN()으로는 true인 것들
Number.isNaN('NaN'); // false
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN('abc'); // false
(5) NaN === NaN: false
NaN은 자기자신을 포함한 그 어떤 값과 비교(==,!=,===,!==)했을 때false를 반환한다.NaN만이 자기자신과 비교했을 때 같지 않기 때문에, 이를 이용하는 것도 신뢰성 있는 하나의 방법이다.
function valueIsNaN(v) {
return v !== v;
}
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true