@olya_097

!!timerId значит true и зачем timerId = null;?

Весь код - next.plnkr.co/edit/oJiWLMp7ekepNXrQ

1) !!timerId в 13 строке значит true?
this.isRunning = function() {
        return !!timerId;
      };


2) timerId = null; зачем? в 41 строке
  • Вопрос задан
  • 286 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
!!timerId - это приведение значения к логическому типу. т.е. типа
// ЭТОТ КОД ТОЛЬКО ДЛЯ ДЕМОНСТРАЦИИ. НЕ ПИШИТЕ ТАК
if (timerId) {
   return true;
} else {
  return false;
}

Восклицательный знак указывается два раза для того, чтобы не инвертировать логическое значение.
var a = 10;
var b = !a; // false, т.к. 10 это true, а !true это false (т.к. ! - знак отрицания).
var c = !b; // !false == true
c === !!a // true, т.к. !!10 === !false === true
c === !b; // true, т.к. !(!a) === !!a === !!10 === !false === true

2) это видимо для того, чтобы первый случай !!timerId был равен false, т.к. !!null === false

UPD: прочитайте вот это обязательно https://learn.javascript.ru/types-conversion
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@afanasiyz
Javascript-разработчик
!!timerId в 13 строке значит: timerId будет true всегда, если он не null, undefined, пустая строка, false, 0.
Это проверка на null, в общем

Затем, чтобы сделать индикацию.
Если timerId не null - а в нем айди таймера - значит код в setTimeout еще не вызвался.
Если null - уже вызвался.
Ответ написан
Комментировать
Вообще некоторые style guides рекомендуют явное преобразование Boolean(null), Boolean(20)
Тут нужно смотреть на код целиком
1) Метод isRunning очевидно показывает выполняется ли какоето задание или нет, установлен в переменной timerId какойто таймер или нет
2) run метод запускает отложенную задачу, а индикатор таймера записывается в timerId
3) Как только отложенная задача выполнилась, timerId устанавливается в null и метод isRunning вернет false, значит процесс кипячения не запущен.
https://learn.javascript.ru/settimeout-setinterval
https://www.ozon.ru/context/detail/id/19677670/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы