๐Ÿ“– Number

c_yjยท2022๋…„ 7์›” 4์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
25/42

ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์ธ Number๋Š” ์›์‹œ ํƒ€์ž…์ธ ์ˆซ์ž๋ฅผ ๋‹ค๋ฃฐ ๋–„ ์œ ์šฉํ•œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

โœ”๏ธ Number ์ƒ์„ฑ์ž ํ•จ์ˆ˜

ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์ธ Number ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด๋‹ค. ๋”ฐ๋ผ์„œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ผ ํ˜ธ์ถœํ•˜์—ฌ Number ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Number ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๋ฉด [[NumberData]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์— 0์„ ํ• ๋‹นํ•œ Number ๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

const numObj = new Number();
console.log(numObj); // Number {[[PrimitiveValue]]: 0}

Number ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋ฉด ์ธ์ˆ˜๋ฅผ ์ˆซ์ž๋กœ ๊ฐ•์ œ ๋ณ€ํ™˜
new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Number ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Number ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜๊ธฐ๋„ ํ•จ.

// ๋ฌธ์ž์—ด ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
Number('0'); // 0
Number('-1'); // -1
Number('10.53'); // 10.53

// ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
Number(true); // 1
Number(false); // 0

โœ”๏ธ Number ํ”„๋กœํผํ‹ฐ

โœ๏ธ Number.EPSILON

ES6์—์„œ ๋„์ž…๋„๋‹ˆ Number.EPSILON์€ 1๊ณผ 1๋ณด๋‹ค ํฐ ์ˆซ์ž ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž์™€์˜ ์ฐจ์ด์™€ ๊ฐ™๋‹ค. Number.EPSILON์€ ๋ถ€๋™์†Œ์ˆ˜์ ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์˜ค์ฐจ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

function isEqual(a,b){
  // a์™€ b๋ฅผ ๋บธ ๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’์ด Number.EPSILON๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ฐ™์€ ์ˆ˜๋กœ ์ธ์ •ํ•œ๋‹ค
  return Math.abs(a-b) < Number.EPSILON;
}
isEqual(0.1 + 0.2, 0.3); // true

โœ๏ธ Number.MAX_VALUE

Number.MAX_VALUE๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์–‘์ˆ˜ ๊ฐ’์ด๋‹ค. Number.MAX_VALUE๋ณด๋‹ค ํฐ ์ˆซ์ž๋Š” Infinity๋‹ค.

Number.MAX_VALUE; // 1.7976931348623157e+308
Infinity > Number.MAX_VALUE; // true

โœ๏ธ Number.MIN_VALUE

Number.MAX_VALUE๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์–‘์ˆ˜ ๊ฐ’์ด๋‹ค. Number.MAX_VALUE๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž๋Š” 0์ด๋‹ค.

Number.MIN_VALUE; // 5e-324
Number.MIN_VALUE > 0; // true

โœ๏ธ Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ •์ˆ˜๊ฐ’(9007199254740991์ด๋‹ค.

Number.MAX_SAFE_INTEGER; // 9007199254740991์ด๋‹ค

โœ๏ธ Number.MIN_SAFE_INTEGER

Number.MAX_SAFE_INTEGER๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ •์ˆ˜๊ฐ’(-9007199254740991์ด๋‹ค.

Number.MIN_SAFE_INTEGER; // -9007199254740991์ด๋‹ค

โœ๏ธ Number.POSITIVE_INFINITY

Number.MIN_POSITIVE_INFINITY๋Š” ์–‘์˜ ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’ Infinity์™€ ๊ฐ™๋‹ค.

Number.POSITIVE_INFINITY // Infinity

โœ๏ธ Number.NEGATIVE_INFINITY

Number.MIN_POSITIVE_INFINITY๋Š” ์Œ์˜ ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’ Infinity์™€ ๊ฐ™๋‹ค.

Number.NEGATIVE_INFINITY // -Infinity

โœ๏ธ Number.NAN

Number.NAN์€ ์ˆซ์ž๊ฐ€ ์•„๋‹˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’์ด๋‹ค.

Number.NaN; // -NaN

โœ”๏ธ Number ๋ฉ”์„œ๋“œ

โœ๏ธ Number.isFinite

ES6์—์„œ ๋„์ž…๋œ Number.isFinite ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ˆซ์ž๊ฐ’์ด ์ •์ƒ์ ์ธ ์œ ํ•œ์ˆ˜, Infinity ๋˜๋Š” -Infinity๊ฐ€ ์•„๋‹Œ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜.

// ์ธ์ˆ˜๊ฐ€ ์ •์ƒ์ ์ธ ์œ ํ•œ์ˆ˜์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Number.isFinite(0); // true
Number.isFinite(Number.MAX_VALUE); // true
Number.isFinite(Number.MIN_VALUE); // true

// ์ธ์ˆ˜๊ฐ€ ๋ฌดํ•œ์ˆ˜์ด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false

์ธ์ˆ˜๊ฐ€ NaN์ด๋ฉด ์–ธ์ œ๋‚˜ false๋ฅผ ๋ฐ˜ํ™˜
Number.isFinite ๋ฉ”์„œ๋“œ์™€ ๋นŒํŠธ์ธ ์ „์—ญ ํ•จ์ˆ˜ isFinite์™€์˜ ์ฐจ์ด

// Number.isFinite๋Š” ์ธ์ˆ˜๋ฅผ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Number.isFinite(null); // false

// isFinite๋Š” ์ธ์ˆ˜๋ฅผ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•œ๋‹ค. null์€ 0์œผ๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜๋œ๋‹ค
isFinite(null); // true

โœ๏ธ Number.isInteger

ES6์—์„œ ๋„์ž…๋œ Number.isInteger ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ˆซ์ž๊ฐ’์ด ์ •์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ฒ€์‚ฌํ•˜๊ธฐ ์ „์— ์ธ์ˆ˜๋ฅผ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Œ

// ์ธ์ˆ˜๊ฐ€ ์ •์ˆ˜์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Number.isInteger(0) // true
Number.isInteger(123) // true
Number.isInteger(-123) // true

// 0.5๋Š” ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
Number.isInteger(0.5) // false
// '123'์„ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Number.isInteger('123') // false
// false๋ฅผ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Number.isInteger(false) // false
// Infinity/-Infinity๋Š” ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
Number.isInteger(Infinity) // false
Number.isInteger(-Infinity) // false

โœ๏ธ Number.isNaN

ES6์—์„œ ๋„์ž…๋œ Number.isNaN ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ˆซ์ž๊ฐ’์ด NaN์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜.

// ์ธ์ˆ˜๊ฐ€ NaN์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Number.isNaN(NaN); // true

Number.isNaN ๋ฉ”์„œ๋“œ์™€ ๋นŒํŠธ์ธ ์ „์—ญ ํ•จ์ˆ˜ isNaN๊ณผ ์ฐจ์ด

// Number.isNaN(undefined); // false
Number.isNaN(undefined); // false

// isFinite๋Š” ์ธ์ˆ˜๋ฅผ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•œ๋‹ค. undefined๋Š” NaN์œผ๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜๋œ๋‹ค.
isNaN(undefined); // true

โœ๏ธ Number.isSafeInteger

ES6์—์„œ ๋„์ž…๋œ Number.isSafeInteger ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ˆซ์ž๊ฐ’์ด ์•ˆ์ „ํ•œ ์ •์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜

// 0์€ ์•ˆ์ „ํ•œ ์ •์ˆ˜๋‹ค.
Number.isSafeInteger(0); // true
// 10000000000์€ ์•ˆ์ „ํ•œ ์ •์ˆ˜๋‹ค
Number.isSafeInteger(10000000000); // true

// 100000000001์€ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
Number.isSafeInteger(100000000001); // false
// 0.5๋Š” ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
Number.isSafeInteger(0.5); // false
// '123'์„ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Number.isSafeInteger('123'); // false
// false๋ฅผ ์ˆซ์ž๋กœ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Number.isSafeInteger(false); // false
// Infinity/-Infinity๋Š” ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
Number.isSafeInteger(Infinity); // false

โœ๏ธ Number.prototype.toExponential

toExponential ๋ฉ”์„œ๋“œ๋Š” ์ˆซ์ž๋ฅผ ์ง€์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

(77.1234).toExponential(); // "7.71234e+1"
(77.1234).toExponential(4); // "7.7123e+1"
(77.1234).toExponential(2); // "7.71e+1"

โœ๏ธ Number.prototype.toFixed

toFixed ๋ฉ”์„œ๋“œ๋Š” ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜.

// ์†Œ์ˆ˜์  ์ดํ•˜ ๋ฐ˜์˜ฌ๋ฆผ ์ธ์ˆ˜๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’ 0์ด ์ง€์ •๋œ๋‹ค
(12345.6789).toFixed(); // "12346"
// ์†Œ์ˆ˜์  ์ดํ•˜ 1์ž๋ฆฟ์ˆ˜ ์œ ํšจ, ๋‚˜๋จธ์ง€ ๋ฐ˜์˜ฌ๋ฆผ
(12345.6789).toFixed(1); // "12345.7"
// ์†Œ์ˆ˜์  ์ดํ•˜ 2์ž๋ฆฟ์ˆ˜ ์œ ํšจ, ๋‚˜๋จธ์ง€ ๋ฐ˜์˜ฌ๋ฆผ
(12345.6789).toFixed(2); // "12345.68"
// ์†Œ์ˆ˜์  ์ดํ•˜ 3์ž๋ฆฟ์ˆ˜ ์œ ํšจ, ๋‚˜๋จธ์ง€ ๋ฐ˜์˜ฌ๋ฆผ
(12345.6789).toFixed(3); // "12345.679"

โœ๏ธ Number.prototype.toPrecision

toPrecision ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ „์ฒด ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ์œ ํšจํ•˜๋„๋ก ๋‚˜๋จธ์ง€ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋ฐ˜์˜ฌ๋ฆฌํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

// ์ „์ฒด ์ž๋ฆฟ์ˆ˜ ์œ ํšจ. ์ธ์ˆ˜๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’ 0์ด ์ง€์ •๋œ๋‹ค.
(12345.6789).toPrecision(); // "12345.6789"
// ์ „์ฒด 1์ž๋ฆฟ์ˆ˜ ์œ ํšจ, ๋‚˜๋จธ์ง€ ๋ฐ˜์˜ฌ๋ฆผ
(12345.6789).toPrecision(1); // "1e+4"
// ์ „์ฒด 2์ž๋ฆฟ์ˆ˜ ์œ ํšจ, ๋‚˜๋จธ์ง€ ๋ฐ˜์˜ฌ๋ฆผ
(12345.6789).toPrecision(2); // "1.2e+4"
// ์ „์ฒด 6์ž๋ฆฟ์ˆ˜ ์œ ํšจ, ๋‚˜๋จธ์ง€ ๋ฐ˜์˜ฌ๋ฆผ
(12345.6789).toPrecision(6); // "12345.7"

โœ๏ธ Number.prototype.toString

toString ๋ฉ”์„œ๋“œ๋Š” ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜

// ์ธ์ˆ˜๋ฅผ ์ƒ๋žตํ•˜๋ฉด 10์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜
(10).toString(); // 10
// 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋ฐ”๋…ธํ•œ
(16).toString(2); // "10000"
// 8์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋ฐ”๋…ธํ•œ
(16).toString(8); // "20"
// 16์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋ฐ”๋…ธํ•œ
(16).toString(16); // "10"
profile
FrontEnd Developer

0๊ฐœ์˜ ๋Œ“๊ธ€