[TIL]モダンJavaScript Deep Dive-Number


第28章.Number
標準的なコンストラクションオブジェクトであるNumberは、元のタイプの数値を処理する際に有用なpropertyと方法を提供します.
番号ジェネレータ関数
標準コンストラクションオブジェクトであるNumberオブジェクトはコンストラクション関数オブジェクトです.したがって、new演算子とともに呼び出してNumberインスタンスを作成できます.
引数をNumberコンストラクタに渡さずにnew演算子とともに呼び出すと、[Number Data]の内部スロットに0のNumber Rapperオブジェクトが作成されます.
const numObj = new Number();
console.log(numObj); // Number {[[PrimitiveValue]]: 0}
数値を数値ジェネレータ関数の引数として渡し、new演算子とともに呼び出すと、[Number Data]の内部スロットに、引数として数値を指定するNumber Rapperオブジェクトが作成されます.
const numObj = new Number(10);
console.log(numObj); // Number {[[PrimitiveValue]]: 10}
数値ではなく番号生成器関数の引数に値を渡す場合は、引数を強制的に数値に変換し、[Number Data]の内部スロットに番号付きrapperオブジェクトを作成し、変換後の数値を指定します.引数を数値に変換できない場合は、[Number Data]の内部スロットに割り当てられたNumber Rapperオブジェクトが生成されます.
let numObj = new Number('10');
console.log(numObj); // Number {[[PrimitiveValue]]: 10}

numObj = new Number('Hello');
console.log(numObj); // Number {[[PrimitiveValue]]: NaN}
new演算子を使用してNumberジェネレータ関数を呼び出さない場合は、Numberインスタンスではなく数値を返します.タイプを明示的に変換することもできます.
// 문자열 타입 => 숫자 타입
Number('0'); // 0
Number('-1'); // -1
Number('10.53'); // 10.53

// 불리언 타입 => 숫자 타입
Number(true); // 1
Number(false); // 0
数値パーセント
Number.EPSILON
ES 6に導入された番号.EPSILONは、1と1より大きい数字の中で最も小さい数字と同じ差があります.Number.EPSILONは約2.2044604923031008472633361816 x 10^−16である.
Number.EPSILONは浮動小数点による誤差を解決するために用いられる.次の例は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.MAXVALUEはJavaScriptで最大の正の値(1.797693134862357 x 10^308)です.Number.MAX VALUEより大きい数字はInfinityです.
Number.MAX_VALUE; // 1.7976931348623157e + 308
Infinity > Number.MAX_VALUE; // true
Number.MIN_VALUE
Number.MIN VALUEは、JavaScriptで表すことができる最小の正の値である(5 x 10^-324).Number.MIN VALUE未満の数字は0です.
Number.MIN_VALUE; // 5e-324
Number.MIN_VALUE > 0; // true
Number.MAX_SAFE_INTEGER
Number.MAX SAFE INTEGERは、JavaScriptで安全に表現できる最大整数値(900799254740991).
Number.MAX_SAFE_INTEGER; // 9007199254740991
Number.MIN_SAFE_INTEGER
Number.MIN SAFE INTEGERは、JavaScriptで安全に表現できる最小整数値である(−90799254740991).
Number.MIN_SAFE_INTEGER; // -9007199254740991
Number.POSITIVE_INFINITY
Number.POSITIVE INFINITYは、正無限大を表す数値INFINITYと同じです.
Number.POSITIVE_INFINITY // Infinity
Number.NEGATIVE_INFINITY
Number.NEGATIVE INFINITYは、負の値が無限大であることを示す数値です.INFINITYと同じです.
Number.NEGATIVE_INFINITY; // -Infinity
Number.NaN
Number.NaNは非数値を表す数値です.Number.NanはwindowNaNと同じように
Number.NaN // NaN
番号付け方法
Number.isFinite
ES 6に導入された番号.isFinite静的メソッドは、引数に渡される値が通常の有限値、すなわちInfinityまたは-Infinityであるかどうかをチェックし、結果を宣言されていない値に戻します.因数がNaNの場合、falseは常に返されます.
// 인수가 정상적인 유한수이면 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(NaN) // false
Number.isInteger
ES 6に導入された番号.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
ES 6に導入された番号.isNaN静的アプローチは,自己変数に伝達された数値がNaNであるかどうかを調べ,結果をBoolean値に戻した.
// 인수가 NaN이면 true를 반환한다.
Number.isNaN(NaN); // true
Number.isSafeInteger
ES 6に導入された番号.isSafeInteger静的メソッドは、引数として渡される数値値が安全な整数であるかどうかをチェックし、結果を宣言されていない値に戻します.安全な整数値は-(2^53-1)と2^53-1の間の整数値です.チェックする前に、パラメータを数値のデフォルトタイプに変換しません.
// 0은 안전한 정수다.
Number.isSafeInteger(0); // true

// 1000000000000000은 안전한 정수다.
Number.isSafeInteger(1000000000000000); // true

// 1000000000000001은 안전하지 않다.
Number.isSafeInteger(1000000000000001); // false

// 0.5는 정수가 아니다.
Number.isSafeInteger(0.5); // false

// '123'을 숫자로 암묵적 타입 변환하지 않는다.
Number.isSafeInteger('123'); // false
Number.prototype.toExponential
toExponentialメソッドは、数値を指数記号に変換し、文字列を返します.指数表現は主に非常に大きいまたは小さい数字を表すために用いられ,e(Exponent)の前の数字に10を乗じたn乗の形で数字を表す.因数で小数点以下の桁数を伝えることができます.
(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から20までの整数値を引数として渡すことができます.パラメータを省略する場合は、デフォルト値0を指定します.
Number.prototype.toPrecision
TOPrecisionメソッドは、残りの数値を四捨五入して文字列を返し、引数として渡されるすべての数値に有効にします.因数で伝達されたすべての数字で表現できない場合は,指数表現で結果を返す.
総桁数を表す0~21の整数値を引数として渡すことができます.パラメータを省略する場合は、デフォルト値0を指定します.
Number.prototype.toString
toStringメソッドは、数値を文字列に変換して返します.配列法を表す2〜36の間の整数値を因数として伝達することができる.パラメータを省略する場合は、デフォルトの10進数を指定します.