Todos los números en JavaScript, ya sean enteros o decimales, son de tipo de tipo. Dentro del programa, la esencia del tipo de número es un número de punto flotante de 64 bits, que es consistente con el número de punto flotante del tipo doble en Java; Por lo tanto, todos los números en JavaScript son números de puntos flotantes. Siguiendo el estándar IEEE 754 (estándar aritmético del punto flotante), el rango de valores que JavaScript puede representar es más o menos 1.7976931348623157 veces 10 a la potencia de 308, y el número decimal mínimo que puede representar es más o menos 5 veces 10 a la potencia de Minus 324. Estos dos valores límite se pueden obtener al acceder al max. Atributo min_value del objeto número respectivamente.
Para enteros, de acuerdo con los requisitos del estándar de EcMascript (http://ecma262-5.com/els5_html.htm#section_8.5), el rango de enteros que Javascript puede representar y realizar operaciones aritméticas precisas es: a la potencia de 53 de o minus 2, es decir, el rango de mínimo -900719999924444444444444444444444444444444444eno valor máximo +9007199254740992; Para enteros que exceden este rango, JavaScript aún puede realizar operaciones, pero no garantiza la precisión de los resultados del cálculo. Vale la pena señalar que para las operaciones de bits enteros (como el cambio y otras operaciones), JavaScript solo admite números enteros de 32 bits, es decir, enteros de -2147483648 a +21474836447.
experimento
Muestra el valor absoluto del número máximo y el valor absoluto del número decimal mínimo en JavaScript:
La copia del código es la siguiente:
console.log (número.max_value);
console.log (number.min_value);
Los resultados son 1.7976931348623157E+308 y 5E-324.
JavaScript no puede dar un resultado de cálculo exacto para enteros fuera de la potencia de 53 de más o menos 2:
La copia del código es la siguiente:
var a = 9007199254740992;
console.log (a+3);
El resultado del cálculo correcto debe ser 90071992547409995, pero el resultado del cálculo dado por JavaScript es 9007199254740996. Después de intentar cambiar la fórmula de cálculo, puede encontrar que siempre que el entero sea mayor que 9007199254740992, los errores en este resultado de cálculo ocurrirán con frecuencia. Si la desviación en la precisión del cálculo es aceptable, las consecuencias del siguiente ejemplo serán aún más graves:
La copia del código es la siguiente:
var max_int = 9007199254740992;
for (var i = max_int; i <max_int +2; ++ i) {
// bucle infinito
}
Debido a los problemas de precisión del cálculo, la declaración anterior para la declaración caerá en un bucle muerto.
Para operaciones de bits, JavaScript solo admite números enteros de 32 bits:
La copia del código es la siguiente:
var smallint = 256;
var bigint = 2200000000;
console.log (Smallint / 2);
console.log (smallint >> 1);
console.log (bigint / 2);
console.log (bigint >> 1);
Se puede ver que para enteros dentro de 32 bits (256), JavaScript puede realizar operaciones de bits correctas, y el resultado es consistente con el resultado de la operación de división (128). Para enteros distintos de 32 bits, JavaScript puede realizar operaciones de división correctas (1100000000), pero los resultados obtenidos después de realizar operaciones de bit están lejos de los resultados correctos (-1047483648).