Может ли setTimeout вернуть 0 в качестве идентификатора? - PullRequest
27 голосов
/ 15 октября 2010

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

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

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

Ответы [ 4 ]

26 голосов
/ 15 октября 2010

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

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

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

13 голосов
/ 15 октября 2010

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

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

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

2 голосов
/ 15 октября 2010

Первое: 0 не то же самое, что ноль, (0 == ноль) будет ложно в каждом случае ';

, если вы хотите проверить' a 'на чем-то: сначала определите' a 'и позже назначьте установленное время 'a'.затем проверьте тип «а».Если значение «неопределенное», таймер еще не сработал

2 голосов
/ 15 октября 2010

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

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

...