Может ли setTimeout когда-либо возвращать 0 в качестве id?

Я пишу чек, чтобы узнать, активен ли тайм-аут. Я думал об этом:

var a = setTimeout(fn, 10);
// ... Other code ... where clearTimeout(a) can be called and set to null
if (a != null)
{
   // do soemthing
}

Мне было интересно, возможно ли когда-нибудь, чтобы a было 0. В этом случае я использовал бы a !== null

Ответ 1

Сначала: 0 - это не то же самое, что и значение null, (0 == null) будет ложным в каждом случае:;

если вы хотите проверить "a" на что-то: сначала определите "a" , а затем присвойте параметру "a" . затем проверьте тип a. Если его "undefined", таймер еще не активирован

Ответ 2

Он не должен, учитывая это:

handle = window . setTimeout( handler [, timeout [, arguments ] ] )

Пусть handle - целое число, определяемое пользователем, больше нуля, которое будет определять таймаут, который будет установлен этим вызовом.

Ответ 3

Спецификации Microsoft, Sun и Mozilla просто говорят, что он вернет целое число. Таким образом, 0 может быть включен.

Возможно (и возможно), что некоторые реализации исключают 0, но вы не должны полагаться на это. Вы должны пойти с !==.

Подводя итог: Хотя, вероятно, весь браузер исключает 0 из идентификаторов, возвращаемых setTimeout, вы не должны писать свой код с учетом этого, особенно когда все, что вам нужно сделать, это добавить extra =.

Ответ 4

Большинство браузеров вернут int, начиная с 1 и увеличивая для каждого вызова setTimeout, поэтому теоретически он никогда не может быть 0.

Но имейте в виду, что на самом деле это не требование спецификации, просто браузеры конвенций, как правило, следуют. См. Принятый ответ здесь для более подробной информации: setInterval/setTimeout возвращаемое значение