Помогите разобраться с решением задачи
Условие задачи: В localStorage по ключу "counters" находится JSON c объектом, полями которого являются имена счётчиков, а значениями - числовое значение счётчика.
Напишите функцию incrementCounter, которой на вход первым параметром передаётся counterName - имя счётчика.
Задача функции - увеличить значение счётчика counterName на 1 и обновить данные в localStorage.
В localStorage может находится не валидный JSON, чтение которого может привести к ошибке, в этом случае функция должна записывать новые данные, где у указанного счетчика будет значение 1.
В конце функция должна возвращать значение счетчика после инкремента.
Пример использования:
// в localStorage 1 счетчик: bannerClick = 5
incrementCounter('bannerClick'); // 6
incrementCounter('bannerClose'); // 1
// в localStorage 2 счетчика: bannerClick = 6, bannerClose = 1
Вот само решение:
function incrementCounter(counterName){
let counters;
try {
counters = JSON.parse(localStorage.getItem("counters"));
} catch (er) {
counters = {};
}
if(typeof counters[counterName] !== 'number'){
counters[counterName] = 0;
}
counters[counterName]++;
localStorage.setItem("counters", JSON.stringify(counters));
return counters[counterName];
}
Первое меня интересует блоки try/catch. В try мы в новоиспеченную переменную заносим значения ключа counters из localStorage, сразу же запарсивая. А что происходит в блоке catch? Почему там написано
counters = {}
?Почему в условии пишут
counters[counterName]
? Это обращение к значению счетчика, находящегося в localStorage? И почему, если типcounters[counterName]
НЕ number, то ему присваивается значение 0? Это для случая, если будут записываться новые данные?В предпоследней строчке в localStorage заносится
counters
, а почему неcounters[counterName]
?