JavaScript usa un número fijo de bits, 64 de ellos, para almacenar un solo valor numérico. Hay tantos patrones que puede hacer con 64 bits, lo que significa que la cantidad de números diferentes que se pueden representar es limitada. Con N dígitos decimales, puedes representar 10^N números. De manera similar, dados 64 dígitos binarios, puede representar 2^64 números diferentes, que son aproximadamente 18 quintillones (un 18 con 18 ceros después).
Javascript almacena tradicionalmente números como un punto flotante de 64 bits con una mantisa de 52 bits, un exponente de 11 bits y el signo es de 1 bit. Efectivamente esto significa que
Los números enteros tienen una precisión de hasta 15 dígitos. -- w3schools.com
Ahora con ES6 se ha concretado la propuesta de BigInt , por lo que se puede acceder a un segundo tipo de número cuando se trata de números enteros que pueden tener más de 52 bits . También existen algunas bibliotecas para operaciones con grandes números proporcionados como cadenas.