Como o javascript trata inteiros grandes (mais de 52 bits)?

Considere este código (nó v5.0.0)

const a = Math.pow(2, 53)
const b = Math.pow(2, 53) + 1
const c = Math.pow(2, 53) + 2

console.log(a === b) // true
console.log(a === c) // false

Por quêa === b é verdade?

Qual é o valor inteiro máximo que o javascript pode manipular?

Estou implementando um gerador inteiro aleatório de até 2 ^ 64. Existe alguma armadilha que eu deveria estar ciente?

questionAnswers(4)

yourAnswerToTheQuestion