Может ли 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 возвращаемое значение