2010-10-15 13 views
24

Estoy escribiendo un cheque para ver si un tiempo de espera está activo. Yo estaba pensando en hacer esto:¿Puede setTimeout devolver 0 como ID?

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

Me preguntaba si alguna vez iba a ser posible que un ser será 0. En ese caso, me gustaría utilizar a !== null

Respuesta

3

Primero: 0 no es lo mismo que null, (0 == nulo) sería falso en todos los casos ';

si desea probar 'a' contra algo: defina 'a' primero y luego asigne settimeout a 'a'. luego verifica el tipo de 'a'. Si está "indefinido", el temporizador aún no se ha activado

+0

Mi error :) No revisé, pero sí '0! = Null' siempre. Esperaba que fueran iguales en Javascript, considerando igualdades como '' y 0, pero este no es el caso. – Aishwar

13

Las especificaciones de Microsoft, Sun y Mozilla acaba de decir que devolverá un número entero. Por lo tanto, se puede incluir 0.

Puede ser posible (y probable) que algunas implementaciones excluyan 0 pero no debe confiar en eso. Deberías ir con el !==.

En resumen: Aunque probablemente todos los navegadores excluye 0 de los identificadores devueltos por setTimeout, no se debe escribir el código con esto en mente, especialmente cuando toda su tiene que hacer es añadir un extra =.

+0

+1 Gracias. Respondiste mi pregunta, aunque la respuesta aceptada se dirigió a mi preocupación. – Aishwar

20

It shouldn't, dada esta:

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

Vamos handle ser un número entero definido por el usuario-agente que es mayor que cero que identificará el tiempo de espera que se fijará por esta llamada.

+1

¿No son esas especificaciones de HTML5? –

+1

@Alin: Llegué a este sitio a través de https://developer.mozilla.org/en/DOM/window.setTimeout, donde dice que es parte del DOM Nivel 0. Así que pensé que esto era más antiguo que HTML5, pero tal vez estoy malinterpretando algo. –

+0

+1 Gracias por el enlace. Respondiste mi pregunta, aunque la respuesta aceptada se dirigió a mi preocupación. – Aishwar

2

mayoría de los navegadores devolver un int a partir de 1, e incrementando para cada llamada de setTimeout así que en teoría nunca pudo ser 0.

Pero hay que tener en cuenta que esto no es realmente un requisito de la especificación, solo una convención que los navegadores tienden a seguir. Consulte la respuesta aceptada aquí para obtener más detalles: setInterval/setTimeout return value

+3

Aparentemente es parte de la especificación HTML5 (http://www.w3.org/TR/html5/timers.html). Pre-HTML5 era solo una convención. – mhenry1384

Cuestiones relacionadas