我正在写一张支票,看看超时是否有效。我在想这样做:
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
答案 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'的类型。如果它'未定义',则计时器尚未触发