2014-02-13 1 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()' is * 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

Нет гарантии, что интервал будет работать каждые 1 мс, это зависит от того, что еще происходит в цикле, JS будет пытаться запускать необходимое количество раз, когда дело доходит до его запуска (я имею в виду, что если бы не было времени для запуска этой функции в течение одной секунды JS попытается запустить ее 1000 раз после этого времени). Также я думаю, что существует минимальный интервал, который будет принудительным, и его более одной миллисекунды.