Не понимаю, почему этот код работает - PullRequest
5 голосов
/ 10 июля 2019

Если браузером пользователя является IE, а localStorage еще не существует, следующий код устанавливает localStorage, срок действия которого истекает 24 часа.

(function ieAlert() {
  var lastclear = window.localStorage.getItem('myLocalStorage'),
  time_now  = (new Date()).getTime();

  var isIE = document.documentMode

  if (isIE && !lastclear) {    
    if ((time_now - lastclear) > 1000 * 60 * 60 * 24) {
      window.localStorage.clear()
      window.localStorage.setItem('myLocalStorage', time_now)
    }
  }
})()

Работает.Но что я не понимаю, так это часть:

if (isIE && !lastclear) {    
    if ((time_now - lastclear) > 1000 * 60 * 60 * 24) {
      window.localStorage.clear()
      window.localStorage.setItem('myLocalStorage', time_now)
    }
  }

Здесь lastclear не определено, как тогда работает расчет?

1 Ответ

10 голосов
/ 10 июля 2019

Здесь lastclear не определено, как тогда работает расчет?

Нет, это null.getItem возвращает null для записей, которые не существуют.В числовом контексте null приводит к 0, поэтому number - null равно number - 0, равно number.

(тогда как, если первоначальный автор обращался к нему другим способом, localStorage.myLocalStorage,значение действительно было бы undefined, и > не сработало бы, потому что number - undefined равно NaN, и все сравнения с NaN приводят к false.)

Если яписали код, я бы не стал полагаться на эту null часть принуждения, не в последнюю очередь потому, что это сбивает с толку будущих читателей кода (так же, как и вас).Но вот почему это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...