Согласно specification,Почему setInterval принимает только значения задержки 2^31-1?
long setInterval(Function handler, optional long timeout, any... arguments);
setInterval()
предполагается принять long
задержки тайм-аута.
Однако на 64-битном Linux он ведет себя так, как будто это был подписанный 32-битный int. Я не тестировал другие платформы, please try и оставлял комментарии.
Очевидный вопрос - Почему?
Может кто-то объяснить почему я получаю мгновенно выход этого:
let maxSigned32 = 2147483647;
let safeInt = maxSigned32 + 1;
console.log(safeInt);
console.log(Number.MAX_SAFE_INTEGER);
console.log(safeInt < Number.MAX_SAFE_INTEGER); // true
let days = Math.round(safeInt/(1000.0 * 60 * 60 * 24));
console.log(safeInt + ' ms is ~' + days + ' days');
setTimeout(() => {
console.log('I should not see this today')
}, safeInt);
Я получаю это (неправильно?) Результаты как на Chrome 52 и Firefox 48. Интересно, когда я построил и попробовал с последним ChakraCore, он ведет себя более разумно.
Фактически, согласно спецификации номера: «Максимальное безопасное целое число в JavaScript (2^53 - 1)». https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number, –
@AndrewParamoshkin правильно, это в отрывке BTW –
* «Обратите внимание, что побитовые операторы и операторы сдвига работают на 32 -бит int, поэтому в этом случае максимальное безопасное целое число равно 2^31-1 или 2147483647. "* из [здесь] (http://stackoverflow.com/questions/307179/what-is-javascripts-highest- integer-value-that-a-number-can-go-to-without-losin) – Li357