표준 빌트인 객체인 Number 객체는 생성자 함수이다.
new 연산자와 함꼐 호출하면 Number인스턴스를 생성할 수 있따
Nubmer 생성자 함수에인수를 전달하지 않고 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 0을 할당한 Number 래퍼 객체를 생성한다.
const numObj = new Number();
console.log(numObj); // [Number: 0]
const numObj2 = new Number(10);
console.log(numObj2); //[Number: 10]
const numObjString = new Number("10");
console.log(numObjString); //[Number: 10]
const numObjNaN = new Number("NAN");
console.log(numObjNaN); //[Number: NaN]
숫자가 아닌 값을 넘기면 숫자로 타입 변경을 하고, 이때 해당 값이 숫자가 아니면 NaN을 [[NumberData]] 내부 슬롯에 할당한다.
명시적 타입변경에 의해서 new 연산자를 사용하지 않고 Number생성자 함수를 사용하면 Number인스턴스가 아닌 숫자를 반환한다.
Number 프로퍼티
암묵적 타입변화가 없음.
1. Number.EPSILON
ES6에서 도입된 Number.EPSILON은 1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 같다.
사용 이유 : 부동소수점 산술 연산은 정확한 결과를 기대하기 어렵다. 정수는 2진법으로 오차없이 저장 가능하지만 부동소수점을 표현하기 위해 가정 널리 쓰이는 표준인 IEE 754는 2진법으로 변환했을 때 무한 소수가 되어 미세한 오차가 발생할 수 밖에 없는 구조조 한계를 가짐. 이를 해겱하기 위해서 사용함
//부동 소수점 오차
console.log(0.1 + 0.2); //0.30000000000000004
console.log(0.1 + 0.2 === 0.3); //false
function isEqual(a, b) {
//a 와 b를 뺸 값의 절대값이 Number.EPSILON보다 작으면 같은수로 인정한다.
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)); //true
2. Number.Max.Value
Number.Max_VALUE는 자바스크립트에서 표현할 수 있는 가장 큰 양수 값이다. 이 보다 큰 값은 Infinity다
3. Number.Min.Value
Number.Max_VALUE는 자바스크립트에서 표현할 수 있는 가장 작은 양수 값이다. 이 보다 큰 값은 0다
4. Number.MAX_SAFE_INTEGER
자바스크립트에서 안전하게 표현할 수 있는 가장 큰 정수값
5.Number.MIN_SAFE_INTEGER
자바스크립트에서 안전하게 표현할 수 있는 가장 작은 정수값
6.Number.POSITIVE_INFINITY
양의 무한대를 나타내는 숫자값 Infinity와 같다
7.Number.NEGATIVE_INFINITY
음의 무한대를 나타내는 숫자값 -Infinity와 같다
8.Number.NaN
숫자가 아님을 나타내는 숫자값 window.NaN이랑 같다
Number 메서드
1. Number.isFitnite
ES6에서 도입된 Number.isFinite 정적 메서드는 인수로 전달된 숫자값이 정상적인 유한수인지 검사하여 그 결과를 불리언 값으로 바노한함. 인수가 NaN이면 언제나 false 반환함
빌트인 전역 함수 isFinite와 차이는 타입변환을 하지 않는 것이다. (숫자가 아닌 값은 언제나 false)
//Number.isFintie
console.log(Number.isFinite("10")); //false
// isFinite는 인수를 숫자로 암묵적 타입 변환함
console.log(isFinite("10")); //true
2. Number.isInteger
전달된 숫자값이 정수인지 검사하여 그 결과 값을 불리언 값으로 변환함(암묵적 타입변환 x)
3. Number.isNaN
ES6에서 도입된 Number.isNaN 정적 메서드는 인수로 전달된 숫자값이 NaN인지 검사하여 그 결과를 불리언으로 반환함
빌트인 전역함수 isNaN과 달리 암묵적 타입 변환하지 않음
4.Number.isSafeInteger
ES6에서 도입됨.
인수로 전달된 숫자값이 안전한 정수인지 검사하여 그 결과를 불리언 값으로 반환함(암묵적 타입 변환 없음)
5. Number.prototype.toExponential
숫자를 지수 표기법으로 반환하여 문자열로 반환한다. 인수로 소수점 이하로 표현할 자릿수를 전달할 수 있다.
숫자 리터럴과 함꼐 Number 프로토타입 메서드로 사용할 경우 에러가 발생한다.(숫자 뒤 .의 의미는 모호하기 때문) 따라서 그룹 연산자를 사용할 것이 권장됨.
// Number.prototype.toExponential
console.log((77.1234).toExponential()); //7.71234e+1
console.log((77.1234).toExponential(2)); //7.71e+1
// 소수점이 있을 경우는 사용가능하지만 권장 X
console.log((77.1234).toExponential()); //7.71234e+1
// console.log(77.toExponential())//SyntaxError: Invalid or unexpected token
6.Number.prototype.toFixed
toFixed 메서드는 숫자를 반올림하여 문자열로 반환한다. 반올림하는 소수점 이하 자릿수를 나타내는 0~20 사이의 정수값을 신수로 전달할 수 있다. 인수를 생략하면 기본값 0 이 지정된다.
//소수점 이하 반올림. 인수를 생략하면 기본값 0이 지정됨
console.log((12345.6789).toFixed()); //12346
console.log((12345.6789).toFixed(2)); //12345.68
7. Number.prototype.toPrecision
인수로 전달받은 전체 자릿수까지유효하도록 나머지 자릿수를 반올림하여 문자열로 반환함. 인수로 전달받은 전체 자릿수로 표현할 수 없는 경우 지수 표기법으로 결과를 반환함
전체 자릿수를 나타내는 0~21사이의 정수값을 인수로 전달할 수 있고, 인수 생략하면 기본값이 0 이다
console.log((12345.6789).toPrecision()); //12345.6789
console.log((12345.6789).toPrecision(2)); //1.2e+4
console.log((12345.6789).toPrecision(5)); //12346
8.Number.prototype.toString
숫자를 문자열로 변환하여 반환함 . 진법을 나타내는 2~36사이의 정수값을 인수로 전달할 수 있고, 인수를 생략하면 기본값 10 진법이 지정됨.
'강의 노트 > JS' 카테고리의 다른 글
| [JS deep dive] Date (0) | 2023.04.17 |
|---|---|
| [JS deep dive] Math (0) | 2023.04.16 |
| [JS deep dive] 배열 (0) | 2023.04.14 |
| [JS deep dive] ES6 함수의 추가 기능 (0) | 2023.04.11 |
| [JS deep dive] 25장 클래스 (0) | 2023.04.10 |