dolog
숫자형 2 본문
isNaN 과 isFinite
비정상적인 숫자)
Infinity 또는 -Infinity : 어떤 숫자보다 크거나 혹은 작은 특수 숫자 값
NaN : 에러를 나타내는 값
정상적인 숫자와 구분하기 위한 특별한 함수가 바로 isNaN 와 isFinite
- isNaN : 인수를 숫자로 변환한 다음 NaN인지 테스트함
console.log(isNaN(NaN)); // true
console.log(isNaN(“str”)); // true
=== 으로 비교시, NaN은 자신을 포함하여 그 어떤 값과 일치 하지 않기 때문이다
console.log(NaN === NaN); // false
- isFinite : 인수를 숫자로 변환하고 변환한 숫자가 일반 숫자인 경우 true를 반환
ㄴ NaN / Infinity / -Infinity 는 false
console.log(isFinite(“15”)); // true
console.log(isFinite(“str”)); // false
console.log(isFinite(Infinity)); // false
isFinite는 문자열이 일반 숫자인지 검증하는 데 사용되곤 한다
let num = +prompt(“Enter to number”, ‘’);
console.log(isFinite(num)); // 숫자 입력시, true
또한 빈 문자열, 공백만 있는 문자열은 isFinite를 포함한 모든 숫자 관련 내장 함수에서 0으로 취급된다
Object.is 와 비교하기(= SameValue 비교 방식)
- 아래 케이스를 제외하고 Object.is(a, b)와 (a === b)는 같다
- === 보다 신뢰할만한 결과를 보여줄 때(비교 결과가 정확해야 할 때)
➡️ 숫자를 나타내는 비트는 같지만 부호를 나타내는 비트가 다르기 때문
parseInt와 parseFloat
단항 덧셈 연산자 + 또는 Number() 사용하여 숫자형으로 변형할 때 피연산자가 숫자가 아니면 형 변환에 실패한다
console.log(+”100px”); // NaN
유일한 예외는 문자열의 처음 또는 끝에 공백이 있는 경우, 공백이 무시될 때
하지만 실무에선 숫자+기호로 같이 되어있는 경우가 많아서(ex) 100px, 12pt, 19$…) 숫자만 추출해 사용해야 하므로 내장함수 parseInt / parseFloat
- 두 함수는 불가능할 때까지 문자열에서 숫자를 읽는다
- 읽는 도중 오류가 발생하면 이미 수집한 숫자를 반환한다
- parseInt는 정수, parseFloat는 부동 소수점 숫자를 반환한다
console.log(parseInt(‘100px’)); // 100
console.log(parseFloat(‘12.5em’)); // 12.5
console.log(parseInt(‘12.3’)); // 12
console.log(parseFloat(‘12.3.4’)); // 12.3 , 두 번째 점에서 숫자 읽기를 중단
// a가 숫자가 아니므로 숫자를 읽을 수 없기에 NaN 반환
console.log(‘a123’)); // NaN
parseInt(str, radix)의 두번째 인수 radix는 선택적으로 사용할 수 있다
따라서 parseInt를 사용하면 16진수 문자열, 2진수 문자열 등을 파싱할 수 있다
(*parsing : 문자열 데이터를 분석하고 분해하여 목적한 패턴에 맞게 문자열의 구조를 결정하는 것)
console.log(parseInt(‘0xff’, 16)); // 255
console.log(parseInt(‘ff’, 16)); // 255
console.log(parseInt(‘2n9c’, 36)); // 123456
기타 수학 함수(Math의 내장함수는 알아볼수록 좋다)
- Math.random() : 0과 1 사이의 난수를 반환(1은 제외)
console.log(Math.random()); // 0.1234567894322 외 무작위 수
- Math.max(a, b, c …) / Math.min(a, b, c…) : 인수 중 최대/최솟값을 반환
console.log(Math.max(3, 5, -10, 0, 1)); // 5
console.log(Math.min(1, 2)); // 1
- Math.pow(n, power) : n을 power번 거듭제곱한 값을 반환
console.log(Math.pow(2, 10)); // 2의 10제곱 = 1024