2010-10-15 22 views
24

Tôi đang viết séc để xem thời gian chờ có đang hoạt động hay không. Tôi đã nghĩ đến việc làm điều này:Có thể setTimeout bao giờ trở về 0 làm id không?

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

Tôi đã tự hỏi nếu nó sẽ không bao giờ có thể là một sẽ là 0. Trong trường hợp đó tôi sẽ sử dụng a !== null

Trả lời

3

Đầu tiên: 0 không giống như null, (0 == null) sẽ là sai trong mọi trường hợp ';

nếu bạn muốn kiểm tra 'a' chống lại điều gì đó: xác định 'a' trước và sau đó gán thời gian định cư thành 'a'. sau đó kiểm tra loại 'a'. Nếu 'không xác định' của nó, bộ hẹn giờ chưa kích hoạt

+0

Sai lầm của tôi :) Tôi đã không kiểm tra, nhưng có '0! = Null' luôn. Tôi mong đợi họ được bình đẳng trong Javascript, xem xét sự cân bằng như '' và 0 - nhưng điều này không phải là trường hợp. – Aishwar

13

Các thông số kỹ thuật từ Microsoft, Sun và Mozilla chỉ nói rằng nó sẽ trả về một số nguyên. Vì vậy, 0 có thể được bao gồm.

Có thể (và có thể xảy ra) rằng một số triển khai loại trừ 0 nhưng bạn không nên dựa vào điều đó. Bạn nên đi với !==.

Để tóm tắt: Mặc dù có lẽ tất cả các trình duyệt loại trừ 0 từ các ID được trả về bởi setTimeout, bạn không nên viết mã của bạn với ý nghĩ đó đặc biệt là khi tất cả các bạn phải làm là bổ sung thêm một =.

+0

+1 Cảm ơn. Bạn đã trả lời câu hỏi của tôi, mặc dù câu trả lời được chấp nhận đã giải quyết được mối lo ngại của tôi. – Aishwar

20

It shouldn't, đưa ra này:

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

Hãy handle là một số nguyên user-agent xác định đó là lớn hơn không mà sẽ xác định thời gian chờ để được thiết lập bằng cách gọi này.

+1

Không phải là các thông số kỹ thuật HTML5 chưa? –

+1

@Alin: Tôi đã truy cập trang web này thông qua https://developer.mozilla.org/en/DOM/window.setTimeout, nơi nó nói rằng nó là một phần của DOM Level 0. Vì vậy, tôi nghĩ rằng điều này thực sự cũ hơn HTML5, nhưng có lẽ tôi hiểu sai một cái gì đó. –

+0

+1 Cảm ơn bạn đã liên kết. Bạn đã trả lời câu hỏi của tôi, mặc dù câu trả lời được chấp nhận đã giải quyết được mối lo ngại của tôi. – Aishwar

2

Hầu hết các trình duyệt sẽ trả về một int bắt đầu từ 1 và incrementing cho mỗi cuộc gọi của setTimeout nên về mặt lý thuyết nó không bao giờ có thể là 0.

Nhưng hãy nhớ rằng này là không thực sự là một yêu cầu của spec, chỉ cần một trình duyệt quy ước có xu hướng theo dõi. Xem câu trả lời được chấp nhận tại đây để biết thêm chi tiết: setInterval/setTimeout return value

+3

Nó dường như là một phần của spec HTML5 (http://www.w3.org/TR/html5/timers.html). Pre-HTML5 nó chỉ là một quy ước. – mhenry1384

Các vấn đề liên quan