2010-10-15 12 views
24

Piszę czek, aby sprawdzić, czy limit czasu jest aktywny. Myślałem w ten sposób:Czy setTimeout może kiedykolwiek zwrócić 0 jako identyfikator?

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

Zastanawiałem się, czy to kiedykolwiek możliwe, że będzie 0. W tym przypadku użyłbym a !== null

Odpowiedz

3

Po pierwsze: 0 to nie to samo co zero, (0 == null) w każdym przypadku byłoby fałszywe ";

jeśli chcesz przetestować "a" w stosunku do czegoś: zdefiniuj najpierw "a", a następnie przypisz parametr rozliczeniowy do "a". następnie sprawdź w stosunku do typu "a". Jeśli jest "niezdefiniowany", licznik czasu jeszcze się nie uruchomił:

+0

Mój błąd :) Nie sprawdziłem, ale tak "0! = Null" zawsze. Spodziewałem się, że będą one równe w JavaScript, biorąc pod uwagę równości takie jak '' i 0 - ale tak nie jest. – Aishwar

13

Specyfikacje Microsoft, Sun i Mozilla tylko powiedzieć że zwróci liczbę całkowitą. Tak więc można dołączyć 0.

Może być możliwe (i prawdopodobne), że niektóre implementacje wykluczają 0, ale nie należy na nich polegać. Powinieneś pójść z !==.

Podsumowując: Chociaż prawdopodobnie wszystko przeglądarka wykluczyć 0 z identyfikatorów zwracanych przez setTimeout, nie należy pisać kod Mając to na uwadze zwłaszcza gdy wszystkie swoje musisz zrobić, to dodać dodatkowy =.

+0

+1 Dzięki. Odpowiedziałeś na moje pytanie, chociaż przyjęta odpowiedź skierowała moją uwagę. – Aishwar

20

It shouldn't, biorąc pod uwagę to:

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

Niech handle być User-agent zdefiniowane całkowita, która jest większa niż zero że wskaże czas oczekiwania do ustalenia przez to wezwanie.

+1

Czy to nie są specyfikacje HTML5? –

+1

@Alin: Do tej witryny doszedłem za pośrednictwem https://developer.mozilla.org/en/DOM/window.setTimeout, gdzie jest napisane, że jest częścią DOM Level 0. Więc pomyślałem, że to jest starsze niż HTML5, ale może źle coś interpretuję. –

+0

+1 Dzięki za link. Odpowiedziałeś na moje pytanie, chociaż przyjęta odpowiedź skierowała moją uwagę. – Aishwar

2

Większość przeglądarek powróci int rozpoczynając od 1 i zwiększany za każdym wywołaniu setTimeout więc teoretycznie nie może być 0.

Należy jednak pamiętać, że nie jest to wymóg specyfikacji, zwykle przeglądają się przeglądarki konwentowe. Aby uzyskać więcej informacji, zapoznaj się z zaakceptowaną odpowiedzią: setInterval/setTimeout return value

+3

Jest to najwyraźniej część specyfikacji HTML5 (http://www.w3.org/TR/html5/timers.html). Pre-HTML5 to była tylko konwencja. – mhenry1384

Powiązane problemy