2014-02-13 102 views
0

我有一個問題的Javascript setInterval的if語句不能正常工作

var timer = setInterval(function(){ 
     // the date of new date is ofcourse a date in the future 
     if (Date.now() == Date.parse(new Date(2014, 1, 13, 13, 4, 0, 0))){ 
      console.log('refresh done'); 
      clearInterval(timer); 
     } 
}, 1); 

但是,如果我改變==>=它將正確執行。這是因爲Date.now()會變化得如此之快,以至於在比較發生之前它被改變了嗎?

+0

但是'Date.now()'是* not *'13。 1. 2014年13:04'。這可能更像'13.1。 2014 13:04:21.165'。如果您不希望數據相等,則無法比較平等:) – Luaan

+0

是的,間隔發生的次數比平等檢查少得多。這是原因。 'Date.now()'的作品是毫秒級的解析http://people.mozilla.org/~jorendorff/es6-draft.html#sec-time-values-and-time-range –

+0

@Luaan這不是事實。執行以下代碼:'console.log(Date.now());'這將返回一個時間戳。 @Benjamin Gruenbaum好的,謝謝你的回答。我已經認爲它是這樣的:) – GuyT

回答

3

不能保證間隔會每隔1ms運行一次,這取決於循環中發生了什麼,JS在運行時只會嘗試運行所需的次數(我的意思是如果沒有時間運行這個函數一秒鐘後JS會試着在這段時間後運行它1000次)。此外,我認爲有最小的時間間隔,將被迫並超過一毫秒。