IEEE 754
- 자바스크립트는 IEEE 754에 정의된
- 64비트 부동 소수점으로 수를 처리
- double-precision floating-point format numbers
- 64비트로 최소값과 최대값을 처리
- 64비트 부동 소수점으로 수를 처리
- 정수와 실수를 구분하지 않음
- 1을 1.0으로 처리
64비트 구성
1) 사인 비트
- 63: 1비트
- 값이 0이면 양수, 1이면 음수
2) 지수(exponent)
- 52~62 : 11비트
3) 가수(fraction)
- 0~51: 52비트 + 1(사인 비트): 53비트
Number 상수
- safe integer란
- 지수(e)를 사용하지 않고 나타낼 수 있는 값
- 2의 64승이 아닌 2의 53승
- Number.MAX_SAFE_INTEGER
- safe integer의 최대값
log(Number.MAX_SAFE_INTEGER);
log(Math.pow(2, 53) - 1);
// 9007199254740991
// 9007199254740991
- Number.MIN_SAFE_INTEGER
- safe integer의 최소값
log(Number.MIN_SAFE_INTEGER);
log(-(Math.pow(2, 53) - 1));
// -9007199254740991
// -9007199254740991
Number.EPSILON
- Number.EPSILON
- 아주 작은 값
- 2^(-52)
사용 사례
- 미세한 값 차이 형태
const total = 0.2 + 0.2;
log(total);
log(total === 0.3);
// 0.30000000000000000000004
// false
- 미세한 값 차이를 같은 값으로 간주
const value = Math.abs(0.1 + 0.2 - 0.3);
log(value < Number.EPSILON);
// true
- 0 / 0으로 NaN가 되는 것을 방지
log(0 / 0);
const value = 0 / (0 + Number.EPSILON);
log(value);
// NaN
// 0
진수
- Binary(2진수)
- 0b0101, 0B0101 형태로 작성
- 숫자 0 다음에 b/B 작성하고 이어서 0 또는 1 작성
- Octal(8진수)
- 0O0105 형태로 작성
- 숫자 0 다음에 영문 o/O 작성하고 이어서 0~7로 값을 작성
- ES3는 첫 자리에 영문 o/O 작성
Number 함수
isNaN()
- NaN 값의 여부를 체크
- NaN 값이면 true 아니면 false 반환
- NaN 체크 방법
- NaN === NaN 결과가 false이므로 사용 불가
- isNaN(), 글로벌 오브젝트
- Number.isNaN()
- Object.is(NaN, NaN): true
log(Number.isNaN("ABC"), isNaN("DEF"));
log(Number.isNaN(NaN), isNaN(NaN));
log(Number.isNaN(0 / 0), isNaN(0 / 0));
log(Number.isNaN("100"), isNaN("200"));
// false, true
// true, true
// true, true
// false, false
isInteger()
- 파라미터 값이 정수이면 true 아니면 false 반환
- 정수로 인식
log(Number.isInteger(0));
log(Number.isInteger(1.0)); // 정수
log(Number.isInteger(1.01)); // 소수
// true
// true
// false
- 정수가 아닌 것으로 인식
log(Number.isInteger("12"));
log(Number.isInteger(true));
// false
// false
isSafeInteger()
- 파라미터 값이 safe 정수이면 true 아니면 false 반환
- -(2의 53승 -1) ~ (2의 53승 -1) : true 아니면 false
- true로 인식
const isSafe = Number.isSafeInteger;
log(isSafe(7.0));
log(isSafe(Number.MAX_SAFE_INTEGER));
log(isSafe(Number.MIN_SAFE_INTEGER));
// true
// true
// true
- false로 인식
const isSafe = Number.isSafeInteger;
log(isSafe(7.1));
log(isSafe("100"));
log(isSafe(NaN));
log(isSafe(Infinity));
// false
// false
// false
// false
isFinite()
- 파라미터 값이 유한 값이면 true 아니면 false 반환
- 글로벌 오브젝트의 isFinite()와 체크 결과가 다름
const num = Number.isFinite, global = isFinite;
log(num(100), global(200));
log(num("70"), global("80"));
log(num(true), global(true));
log(num(NaN), global(NaN));
log(num(undefined), global(undefined));
// true, true
// false, true
// flase, true
// false, false
// false, false
- 함수는 오브젝트에 속해야 하므로 Number와 관련된 것은 Number 오브젝트의 함수 사용. 글로벌 오브젝트의 함수는 글로벌 사용이 목적
'Javascript > [인프런] 자바스크립트 ES6+ 기본' 카테고리의 다른 글
[자바스크립트 ES6+ 기본] 12. Object 오브젝트 (0) | 2022.02.01 |
---|---|
[자바스크립트 ES6+ 기본] 11.String 오브젝트 (0) | 2022.02.01 |
[자바스크립트 ES6+ 기본] 9. getter/setter (0) | 2022.01.02 |
[자바스크립트 ES6+ 기본] 8. 연산자, 기타 (0) | 2022.01.02 |
[자바스크립트 ES6+ 기본] 7. for-of문 (0) | 2022.01.02 |