setTimeout能否返回0作为id?

时间:2010-10-15 15:11:44

标签: javascript html settimeout

我正在写一张支票,看看超时是否有效。我在想这样做:

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

4 个答案:

答案 0 :(得分:25)

It shouldn't,鉴于此:

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

handle成为用户代理定义的大于零的整数,它将标识此调用设置的超时。

答案 1 :(得分:13)

Microsoft,Sun和Mozilla的规范只是说它将返回一个整数。因此可以包括0

某些实现可能(并且可能)排除0,但您不应该依赖它。你应该使用!==

总结一下:虽然可能所有浏览器都会从0返回的ID中排除setTimeout,但您不应该记住这些代码,特别是当您需要do是添加额外的=

答案 2 :(得分:2)

大多数浏览器将从1开始返回一个int,并为每次调用setTimeout递增,所以理论上它永远不会为0。

但请记住这并不是规范的要求,只是常规浏览器倾向于遵循。有关详细信息,请参阅此处接受的答案:setInterval/setTimeout return value

答案 3 :(得分:2)

首先:0与null不同,(0 == null)在每种情况下都为false;

如果你想针对某些东西测试'a':首先定义'a'然后将settimeout分配给'a'。然后检查'a'的类型。如果它'未定义',则计时器尚未触发