2025. 7. 9. 09:00ㆍJavascript/Javascript
Number Contructor
Number 객체는 Number() 생성자 함수를 통해 생성할 수 있다. 만일 인자가 숫자로 변한될 수 없다면 NaN을 반환한다.
var x = new Number(123);
var y = new Number('123');
var z = new Number('str');
console.log(x); // 123
console.log(y); // 123
console.log(z); // NaN
그러나 일반적으로 숫자를 사용할 때에는 원시 타입 숫자를 사용한다.
var x = 123;
var y = new Number(123);
console.log(x == y); // true
console.log(x === y); // false
console.log(typeof x); // number
console.log(typeof y); // object
new 연산자를 사용하여 객체를 생성할 때에는 매우 많은 추가 연산을 해야만 한다. 따라서 가능한 한 숫자 리터럴을 사용하여 수를 표현하고 Number 객체는 래퍼 객체로만 활용하는 것이 좋다.
Number.EPSILON
Number.EPSILON은 자바스크립트에서 표현할 수 있는 가장 작은 수로, 이는 임의의 수와 그 수보다 큰 수 중 가장 작은 수와의 차이와 같다.
자바스크립트에서 부동 소수점 산술 연산 비교는 정확한 값을 기대하기 어려운데 정수는 2진법으로 오차 없이 저장이 가능하지만 부동소수점을 표현하는 데 가장 널리 쓰이는 표준인 IEEE754는 2진법으로 변환 시 무한 소수가 되어 미세한 오차가 발생할 수밖에 없는 구조적 한계를 갖기 때문이다.
따라서 부동 소수점의 비교는 Number.EPSILON을 사용하여 비교 기능을 갖는 함수를 작성해야 한다.
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 == 0.3); // false
function isEqual(a, b){
// Math.abs는 절댓값을 반환한다.
// 즉 a와 b의 차이가 JavaScript에서 표현할 수 있는 가장 작은 수인 Number.EPSILON보다 작으면 같은 수로 인정할 수 있다.
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)); // true
Number.MAX_VALUE
자바스크립트에서 사용 가능한 가장 큰 숫자를 반환한다. MAX_VALUE보다 큰 숫자는 Infinity이다.
Number.MIN_VALUE
자바스크립트에서 사용 가능한 가장 작은 숫자를 반환한다. MIN_VALUE는 0에 가장 가까운 양수 값으로 MIN_VALUE보다 작은 숫자는 0으로 변환된다.
Number.POSITIVE_INFINITY
양의 무한대 Infinity를 반환한다.
Number.NAGATIVE_INFINITY
음의 무한대 -Inifinity를 반환한다.
Number.NaN
숫자가 아님(Nat a Number)을 나타내는 숫자값이다. Number.NaN 프로퍼티는 window.NaN 프로퍼티와 같다.
console.log(Number('xyz')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
null, undefined, NaN, Infinity에 대한 비교
자바스크립트에서는 약간 비슷한 것 같으면서도 전혀 다른 4가지 값을 제공하고 있다.
- null은 object 타입이며 아직 값이 정해지지 않은 것을 의미하는 값이다.
- undefined는 null과 달리 하나의 타입으로, 타입이 정해지지 않은 것을 의미하는 값이기도 하다.
- NaN은 number 타입으로 '숫자가 아님'을 의미하는 숫자이다.
- Infinity는 number 타입으로 '무한대'를 의미하는 숫자이다.
자바스크립트는 타입 검사가 매우 유연한 언어이다. 따라서 위의 값들 또한 문맥에 따라 다음과 같이 자동으로 타입 변환이 이루어진다.
값 | Boolean 문맥 | Number 문맥 | String 문맥 |
null | false | 0 | "null" |
undefined | false | NaN | "undefined" |
NaN | false | NaN | "NaN" |
Infinity | true | Infinity | "Infinity" |
Number Method
Number.isFinite(number): boolean
매개변수에 전달된 값이 정상적인 유한수인지 검사하여 그 결과를 Boolean으로 반환한다.
Number.isFinite()는 전역 함수 isFinite()와 차이가 있다. 전역 함수 isFinite()는 인수를 숫자로 변환하여 검사를 수행하지만 Number.isFinite()는 인수를 변환하지 않는다. 따라서 숫자가 아닌 인수가 주어졌을 때 반환값은 언제나 false가 된다.
Number.isFinite(Infinity) // false
Number.isFinite(NaN) // false
Number.isFinite('Hello') // false
Number.isFinite(0) // true
Number.isFinite(2e64) // true
Number.isFinite(null) // false. isFinite(null) => true
Number.isInteger(number): boolean
매개변수에 전달된 값이 정수(Integer)인지 검사하여 그 결과를 Boolean으로 반환한다. 검사 전에 인수를 숫자로 변환하지 않는다.
Number.isInteger(123) //true
Number.isInteger(-123) //true
Number.isInteger(5-2) //true
Number.isInteger(0) //true
Number.isInteger(0.5) //false
Number.isInteger('123') //false
Number.isInteger(false) //false
Number.isInteger(Infinity) //false
Number.isInteger(-Infinity) //false
Number.isInteger(0 / 0) //false
Number.isNaN(number): boolean
매개변수에 전달된 값이 NaN인지 검사하여 그 결과를 Boolean으로 반환한다.
Number.isNaN()은 전역 함수 isNaN()과 차이가 있다. 전역 함수 isNaN()은 인수를 숫자로 변환하여 검사를 수행하지만 Number.isNaN은 인수를 변환하지 않는다. 따라서 숫자가 아닌 인수가 주어졌을 때 반환값은 언제나 false가 된다.
Number.isNaN(NaN) // true
Number.isNaN(undefined) // false. undefined → NaN. isNaN(undefined) → true.
Number.isNaN({}) // false. {} → NaN. isNaN({}) → true.
Number.isNaN('blabla') // false. 'blabla' → NaN. isNaN('blabla') → true.
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
Number.isNaN(new Date()) // false
Number.isNaN(new Date().toString()) // false. String → NaN. isNaN(String) → true.
Number.isSafeInteger(number): boolean
매개변수에 전달된 값이 안전한(safe) 정수인지 검사하여 그 결과를 Boolean으로 반환한다.
안전한 정수 값은 -(2^53 - 1)과 2^53 - 1 사이의 정수 값이다. 검사 전에 인수를 숫자로 변환하지 않는다.
Number.isSafeInteger(123) //true
Number.isSafeInteger(-123) //true
Number.isSafeInteger(5-2) //true
Number.isSafeInteger(0) //true
Number.isSafeInteger(1000000000000000) // true
Number.isSafeInteger(10000000000000001) // false
Number.isSafeInteger(0.5) //false
Number.isSafeInteger('123') //false
Number.isSafeInteger(Infinity) //false
Number.isSafeInteger(-Infinity) //false
Number.isSafeInteger(0 / 0) //false
Number.prototype.toFixed(number): string
매개변수로 지정된 소숫점자리를 반올림하여 문자열로 반환한다.
var numObj = 12345.6789;
// 소숫점 이하 반올림
numObj.toFixed(); // '12346'
// 소숫점 이하 1자리수 유효, 나머지 반올림
numObj.toFixed(1); // '12345.7'
// 소숫점 이하 2자리수 유효, 나머지 반올림
numObj.toFixed(2); // '12345.68'
Number.prototype.toPrecision(number): string
매개변수로 지정된 전체 자리수까지 유효하도록 나머지 자리수를 반올림하여 문자열로 반환한다. 지정된 전체 자리수로 표현할 수 없는 경우 지수 표기법으로 반환한다.
var n = 123.112
n.toPrecision(3) // "123"
n.toPrecision(4) // "123.1"
n.toPrecision(5) // "123.11"
Number.prototype.toString(number): string
var count = 10;
count.toString(); // '10'
(17).toString(); // '17'
17 .toString(); // '17'
(17.2).toString(); // '17.2'
var x = 16;
x.toString(2); // '10000'
x.toString(8); // '20'
x.toString(16); // '10'
(254).toString(16); // 'fe'
(-10).toString(2); // '-1010'
(-0xff).toString(2); // '-11111111'
진법 표현
자바스크립트에서는 기본적으로 10진법을 사용하여 수를 표현한다. 따라서 아래의 예시처럼 산술 연산 시 모든 수가 10진수로 자동 변한되어 계산된다.
var x = 0xAB; // 16진법으로 표현된 10진수 171
var y = 29; // 10진법으로 표현된 10진수 29
x + y; // 두 수 모두 10진법으로 자동으로 변환되어 계산됨. -> 200
또한 숫자에 toString() 메서드를 사용하여 해당 숫자를 여러 진법의 형태로 변환할 수 있다.
var num = 256;
num.toString(2); // 2진법으로 변환 : 100000000
num.toString(8); // 8진법으로 변환 : 400
num.toString(10); // 10진법으로 변환 : 256
num.toString(16); // 16진법으로 변환 : 100
// 2진수로 변환한 결괏값을 문자열로 반환함.
num.toString(2); // 100000000
// 문자열을 숫자로 나눴기 때문에 자동으로 10진수로 변환되어 산술 연산된 결괏값
(num.toString(2) / 2); // 50000000
Number.prototype.valueOf(): number
Number 객체의 원시 타입 값을 반환한다.
var numObj = new Number(10);
typeof numObj; // object
var num = numObj.valueOf();
num; // 10
typeof num; // number
Method | 설명 |
Number.parseFloat() | 문자열을 파싱하여, 문자열에 포함된 숫자 부분을 실수 형태로 반환함. |
Number.parseInt() | 문자열을 파싱하여, 문자열에 포함된 숫자 부분을 정수 형태로 반환함. |
Number.isNaN() | 전달된 값이 NaN인지 아닌지를 검사함. |
Number.isFinite() | 전달된 값이 유한한 수인지 아닌지를 검사함. |
Number.isInteger() | 전달된 값이 정수인지 아닌지를 검사함. |
Number.isSafeInteger() | 전달된 값이 안전한 정수(safe integer)인지 아닌지를 검사함. |
toExponential() | Number 인스턴스를 지수 표기법으로 변환한 후, 그 값을 문자열로 반환함. |
toFixed() | Number 인스턴스의 소수 부분 자릿수를 전달받은 값으로 고정한 후, 그 값을 문자열로 반환함. |
toPrecision() | Number 인스턴스의 가수와 소수 부분의 합친 자릿수를 전달받은 값으로 고정한 후, 그 값을 문자열로 반환함. |
toString() | Number 인스턴스의 값을 문자열로 반환함. |
valueOf() | Number 인스턴스가 가지고 있는 값을 반환함. |
'Javascript > Javascript' 카테고리의 다른 글
[Javascript] map()과 filter()의 차이 이해하기 (0) | 2025.07.10 |
---|---|
[Javascript] String 메서드 (0) | 2025.07.07 |
[Javascript] 비동기 처리 - (3) async/await (1) | 2025.07.03 |
[Javascript] 비동기 처리 - (2) Promise (3) | 2025.07.02 |
[Javascript] 비동기 처리 - (1) 콜백 함수 (3) | 2025.07.01 |