JavaScript suporta números inteiros de 64 bits?

Eu queria saber se JavaScript está manipulando incorretamente inteiros de 64 bits ou estou fazendo algo errado?

Eu tenho o seguinte código:

var str = "0x4000000000000000"; //4611686018427387904 decimal var val = parseInt(str); alert(val); 

Eu recebo este valor: “4611686018427388000”, que é 0x4000000000000060

JavaScript representa números usando o formato de precisão dupla IEEE-754 (64 bits). Pelo que entendi isso lhe dá precisão de 53 bits, ou quinze a dezesseis dígitos decimais. Seu número tem mais dígitos do que o JavaScript pode suportar, então você acaba com uma aproximação.

Isso não é realmente “maltratado” como tal, mas obviamente não é muito útil se você precisar de precisão total em grandes números. Existem algumas bibliotecas JS que podem manipular números maiores, por exemplo, BigNumber e Int64 .

A versão 57 do Chromium e posterior suportam nativamente números inteiros de precisão arbitrária. Isso é chamado BigInt e está sendo trabalhado em outros navegadores também. É dramaticamente mais rápido que as implementações JavaScript.