JavaScriptのすべての数値は、整数であろうと小数であろうと、タイプ数です。プログラム内では、数値タイプの本質は64ビットの浮動小数点数であり、これはJavaのダブルタイプのフローティングポイント番号と一致しています。したがって、JavaScript内のすべての数値は浮動小数点数です。 IEEE 754標準(フローティングポイント算術標準)に続いて、JavaScriptが表すことができる値の範囲は、プラスまたはマイナス1.7976931348623157倍の108の範囲です。それぞれ番号オブジェクト。
整数の場合、ECMAScript規格の要件(http://ecma262-5.com/Els5_html.htm#section_8.5)に従って、JavaScriptが正確な算術演算を表現および実行できる整数の範囲は次のとおりです。 +9007199254740992;この範囲を超える整数の場合、JavaScriptは引き続き操作を実行できますが、計算結果の精度を保証するものではありません。整数ビット操作(シフトやその他の操作など)では、JavaScriptは32ビットの整数数のみ、つまり-2147483648から+2147483647までの整数のみをサポートしていることに注意してください。
実験
JavaScriptの最大数の絶対値と最小小数点の絶対値を表示します。
コードコピーは次のとおりです。
console.log(number.max_value);
console.log(number.min_value);
結果は1.7976931348623157E+308および5E-324です。
JavaScriptは、プラスまたはマイナス2の53の電力の外側の整数に正確な計算結果を与えることはできません。
コードコピーは次のとおりです。
var a = 9007199254740992;
console.log(a+3);
正しい計算結果は9007199254740995でなければなりませんが、JavaScriptによって与えられた計算結果は9007199254740996です。計算式を変更しようとした後、整数が9007199254740992を超える限り、この計算結果の誤差は頻繁に発生します。計算精度の偏差が許容される場合、次の例の結果はさらに深刻になります。
コードコピーは次のとおりです。
var max_int = 9007199254740992;
for(var i = max_int; i <max_int +2; ++ i){
//無限ループ
}
計算の精度の問題により、ステートメントの上記はデッドループに分類されます。
ビット操作の場合、JavaScriptは32ビット整数番号のみをサポートします。
コードコピーは次のとおりです。
var Smallint = 256;
var bigint = 2200000000;
console.log(smallint / 2);
console.log(smallint >> 1);
console.log(bigint / 2);
console.log(bigint >> 1);
32ビット(256)以内の整数の場合、JavaScriptは正しいビット操作を実行できることがわかり、結果は部門操作の結果と一致しています(128)。 32ビット以外の整数の場合、JavaScriptは正しい分割操作(1100000000)を実行できますが、ビット操作を実行した後に得られた結果は正しい結果とはほど遠い(-1047483648)。