티스토리 뷰

Javascript/메소드

[Javascript] Number 메소드

서스포PAR 2022. 4. 19. 11:41

 

 

 

🎡 래퍼 객체(wrapper object)

 

const str = "문자열"; // 리터럴 문자열 생성
const len = str.length; // 문자열 프로퍼티인 length 사용

 

예제에서 생성한 문자열 리터럴 str은 객체가 아닌데도 length 프로퍼티를 사용할 수 있습니다.

프로그램이 문자열 리터럴 str의 프로퍼티를 참조하려고 하면, 자바스크립트는 new String(str)을 호출한 것처럼 문자열 리터럴을 객체로 자동 변환해주기 때문입니다.

 

이렇게 생성된 임시 객체는 String 객체의 메소드를 상속받아 프로퍼티를 참조하는 데 사용된다.

이후 프로퍼티의 참조가 끝나면 사용된 임시 객체는 자동으로 삭제됩니다.

숫저, 문자열. 불리언 등 원시 타입의 프로퍼티에 접근하려고 할 때 생성되는 임시 객체를 래퍼 객체(wrapper object)라고 합니다.

 

 

 

const num = 1.5;
console.log(num.toFixed());  // 2

 

원시타입을 담고 있는 변수 num이 Number.protorype.toFixed() 메소드를 호출할 수 있는 것은 변수 num의 값이 일시적으로 weapper객체로 변환되었기 때문입니다.

 

 

 

 

 


 

💖 Number Constructor 

 

Numver 객체는 Numver() 생성자 함수를 통해 생성할 수 있습니다.

만일 인자가 숫자로 변환될 수 없다면 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은 javaScript에서 표현할수 있는 가장 작은 수 입니다.

이는 임의의 수와 그 수보다 큰 수 중 가장 작은 수와의 차이와 같습니다.

Number.EPSILON은 약 2.2204460492503130808472633361816E-16 또는 2-52입니다.

 

부동소수점 산술 연산 비교는 정확한 값을 기대하기 어렵습니다.

정수는 2진법으로 오차없이 저장이 가능하지만 부동소수저을 표현하기 가장 널리 스이는 표준인 IEEE 754은 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));

 

 

📑 Number.MAX_VALUE

 

자바스크립트에서 사용 가능한 가장작은 숫자(5e-324)를 반환합니다.

MIN_VALUE는 0에 가장 가까운 양수 값입니다. MIN_VALUE보다 작은 숫자는 0으로 변환합니다.

 

📑 Number.MIN_VALUE

 

양의 무한대 Infinity를 반환합니다.

 

📑 Numver.NEGATIVE_INFINITY

 

음의 무한대 -Infinity를 반환합니다.

 

📑 Number.NaN

 

숫자가 아님(Not-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가지 값을 제공하고 있습니다.

 

 

1. nullobject 타입이며, 아직 "값"이 정해지지 않은 것을 의미하는 값입니다.

 

2. undefined는 null과는 달리 하나의 타입이며, "타입"이 정해지지 않은 것을 의미하는 값이기도 합니다.

 

3. NaN number 타입이져, "숫자가 아님"을 의미하는 숫자입니다.

 

4. Infinitynumber 타입이며, "무한대"를 의미하는 숙자입니다.

 

 

자바스크립트는 타입 검사가 매우 유연한 언어입니다.

따라서 위의 값들 또는 문맥에 따라 다음과 같이 자동으로 타입 변환이 이루어집니다.

 

 

Boolean 문맥 Number 문맥 String 문맥
null false O "null"
undefined false NaN "undefined"
NaN false NaN "NaN"
Infinity true Infinity "Infinity"

 

 

 

 

 

 


 

💖 자바스크립트 Number 메소드

 

더보기
메소드 설명
Number.parseFloat() 문자열을 파싱하여, 문자열에 포함된 숫자 부분을 실수 형태로 반환함.
Number.parseInt() 문자열을 파싱하여, 문자열에 포함된 숫자 부분을 정수 형태로 반환함.
Number.isNaN() 전달된 값이 NaN인지 아닌지를 검사함.
Number.isFinite() 전달된 값이 유한한 수인지 아닌지를 검사함.
Number.isInteger() 전달된 값이 정수인지 아닌지를 검사함.
Number.isSafeInteger() 전달된 값이 안전한 정수(safe integer)인지 아닌지를 검사함.

 

 

💖 자바스크립트 Number.prototype  메소드

 

더보기
프로토타입 메소드 설명
toExponential() Number 인스턴스를 지수 표기법으로 변환한 후, 그 값을 문자열로 반환함.
toFixed() Number 인스턴스의 소수 부분 자릿수를 전달받은 값으로 고정한 후, 그 값을 문자열로 반환함.
toPrecision() Number 인스턴스의 가수와 소수 부분의 합친 자릿수를 전달받은 값으로 고정한 후, 그 값을 문자열로 반환함.
toString() Number 인스턴스의 값을 문자열로 반환함.
valueOf() Number 인스턴스가 가지고 있는 값을 반환함.

 

 

 

 


 

Number 메소드

 

Number 메소드는 Number 객체에 정의되어 있는 숫자와 관련된 작업을 할 때 사용하는 메소드입니다.

가장 많이 사용되는 대표적인 Number 메소드는 다음과 같습니다.

 

 

1. Number.isFinite()

2. Number.isInteger()

3. Number.isNaN()

4. Number.isSafeInteger()

5. Number.parseFloat()

6. Number.parseInt()

 

 

 

 


🔊 Number.isFinite(number) : boolean

 

매개변수에 전달된 값이 정상적인 유한수인지를 검사하여 그 결과를 Boolean으로 반환합니다.

Number.isFinite()는 전역 함수 isFinite()와 차이가 있습니다.

전역 함수 isFinite()는 인수를 숫자로 변환하여 검사를 수행하지만

Number.isFinite()는 인수를 변환하지 않습니다.

따라서 숫자가 아닌 인수가 주어졌을 때 반환값은 언제나 false가 됩니다.

 

 

[리턴값]

Boolean

 

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으로 반환합니다.

검사전에 인수를 숫자로 변환하지 않습니다.

 

 

[리턴값]

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가 됩니다.

 

 

[리턴값]

Boolean

 

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으로 반환합니다.

안전한 정수값은 -(253 - 1)와 253 - 1 사이의 정수값입니다.

검사전에 인수를 숫자로 변환하지 않습니다.

 

 

[리턴값]

Boolean

 

 

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.parseFloat(Number) : Number

 

메소드는 문자열을 파싱(parsing)하여, 문자열에 포함된 숫자 부분을 실수 형태로 반환합니다.

문자열에 여러 개의 숫자가 존재하면, 그중에서 첫 번째 숫자만을 실수 형태로 반환합니다.

 

 

[리턴값]

Number

 

Number.parseFloat("12");         // 12
Number.parseFloat("12.34");      // 12.34
Number.parseFloat("12문자열");   // 12
Number.parseFloat("12 34 56");   // 12
Number.parseFloat("문자열 56")); // NaN

 

 

 

🔊 Number.parseInt(Number) : Number

문자열에 포함된 숫자 부분을 정수 형태로 반환합니다.

문자열에 여러 개의 숫자가 존재하면, 그중에서 첫 번째 숫자만을 정수 형태로 반환합니다.

 

 

[리턴값]

Number

 

 

Number.parseInt("12");         // 12
Number.parseInt("12.34");      // 12
Number.parseInt("12문자열");   // 12
Number.parseInt("12 34 56");   // 12
Number.parseInt("문자열 56")); // NaN

 

 

 

 


 

Number.prototype  메소드

 

1. toExponential()

2. toString()

3. toFixed()

4. toPrecision()

5. valueOf

 

 

 


🔊 Number.prototype.toExponential(number) : string

 

대상을 지수 표기법으로 변환하여 문자열로 반환합니다.

지수 표기법이란 매우 큰 숫자를 표기할 때 주로 사용하며, e(Exponent) 앞에 있는 숫자에 10의 n승이 곱하는 형식으로 수를 나타내는 방식입니다다.

 

 

[리턴값]

String

 

const numObj = 77.1234;
 
numObj.toExponential();  // logs 7.71234e+1
numObj.toExponential(4); // logs 7.7123e+1
numObj.toExponential(2); // logs 7.71e+1
77.1234.toExponential(); // logs 7.71234e+1
 
77.toExponential())      // SyntaxError: Invalid or unexpected token
77 .toExponential();     // logs 7.7e+1

 

 

 

🔊 Number.prototype.toString(number) : string

 

숫자를 문자열로 변환하여 반환합니다.

 

 

[리턴값]

String

 

 

const num = 10;
num.toString();   // '10'
(17).toString();    // '17'
17 .toString();     // '17'
(17.2).toString();  // '17.2'
 
const 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'

 

const 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.toFixed(number) : string

 

매개변수로 지정된 소숫점자리를 반올림하여 문자열로 반환합니다

 

 

[리턴값]

Number

 

const numObj = 12345.6789;
 
// 소숫점 이하 반올림
numObj.toFixed();   // '12346'

// 소숫점 이하 1자리수 유효, 나머지 반올림
numObj.toFixed(1);  // '12345.7'

// 소숫점 이하 2자리수 유효, 나머지 반올림
numObj.toFixed(2);  // '12345.68'

 

 

 

🔊 Number.prototype.toPrecision(number) : string

 

매개변수로 지정된 전체 자릿수까지 유효하도록 나머지 자릿수를 반올림하여 문자열로 반환합니다.

지정된 전체 자릿수로 표현할 수 없는 경우 지수 표기법으로 결과를 반환합니다.

 

 

[리턴값]

String

 

const n = 123.112
 
n.toPrecision(3)  // "123"
n.toPrecision(4) // "123.1"
n.toPrecision(5) // "123.11"

 

 

 

🔊 Number.prototype.valueOf() : number 

 

Number 객체의 원시 타입 값(primitive value)을 반환합니다.

 

 

[리턴값]

Number

 

 

const numObj = new Number(10);
typeof numObj; // object
 
const num = numObj.valueOf();
num;           // 10
typeof num;    // number

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함