tech.junha.kr

노트/JavaScript

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을 반환하는 다섯 가지 연산

  1. 숫자로서 읽을 수 없음 ex) parseInt("문자열"), Number(undefined)
  2. 결과가 허수인 수학 계산식 ex) Math.sqrt(-1)
  3. 피연산자가 NaN ex) 7 ** NaN
  4. 정의할 수 없는 계산식 ex) 0 * Infinity, 0 / 0
  5. 문자열을 포함하면서 덧셈이 아닌 계산식 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