Каково значение оператора if в этом коде? - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время я изучаю JavaScript через некоторые учебные пособия, и этот пример появился в учебном пособии. Я просто запутался, почему там должно быть заявление if. Я попытался стереть оператор if, и он все еще работал. Может кто-нибудь помочь мне, пожалуйста.

var timesVisited=0;
var dateVisited = 'Never';

if(localStorage.myLastVisit){
    var visit = JSON.parse(localStorage.myLastVisit);
    timesVisited = visit.numVisits;
    dateVisited = visit.dateVisits;
}

$("#dateVisit").html(dateVisited);

timesVisited++;
$("#numVisit").html(timesVisited);


var myVisits = {};
myVisits.numVisits = timesVisited;
var d = new Date();
var hours = d.getHours();
var minutes = d.getMinutes();
myVisits.dateVisits = hours + ':' + minutes;
localStorage.myLastVisit = JSON.stringify(myVisits)

1 Ответ

1 голос
/ 27 марта 2020

Я попытался стереть оператор if, и он все еще работал.

Только если myLastVisit уже находится в localStorage. Если его там нет (именно для этого if проверяет), без if вы получите ошибку от JSON.parse, потому что вы передадите в нее undefined, которая будет преобразована в строка с символами undefined, потому что для JSON.parse требуется строка, которая затем потерпит неудачу, потому что это неверно JSON. if есть, поэтому, если настройка отсутствует, используются значения по умолчанию, назначенные timesVisited и dateVisited.

Работает, если настройка есть:

var timesVisited=0;
var dateVisited = 'Never';

var visit = JSON.parse(`{"numVisits": 2, "dateVisits": "2020-03-27"}`);
timesVisited = visit.numVisits;
dateVisited = visit.dateVisits;
console.log(timesVisited); // 2
console.log(dateVisited);  // "2020-03-27"

Сбой, если это не так:

var timesVisited=0;
var dateVisited = 'Never';

var visit = JSON.parse(undefined); // ERROR
timesVisited = visit.numVisits;
dateVisited = visit.dateVisits;
console.log(timesVisited);
console.log(dateVisited);
...