#javascript #try-catch
Вопрос:
Элегантный способ вернуть значение null. Не хочу возвращать его дважды.
Вариант 1:
function readSessionStorage(key) { try { if (typeof window !== 'undefined') { return JSON.parse(window.sessionStorage.getItem(key)); } return null; } catch { return null; } }
Вариант 2:
function readSessionStorage(key) { try { return JSON.parse(window.sessionStorage.getItem(key)); } catch { return null; } }
Вариант 3: Если мы выберем этот вариант, зачем нам это делать?
function readSessionStorage(key) { try { if (typeof window !== 'undefined') { return JSON.parse(window.sessionStorage.getItem(key)); } } catch {} return null; }
Почему мне нужно это делать?
Я получаю исключение DOMException , если попытаюсь получить window.sessionStorage
, и, следовательно, мне нужно использовать try...catch
.
function readSessionStorage(key) { if (typeof window !== 'undefined' || !window.sessionStorage) { return JSON.parse(window.sessionStorage.getItem(key)); } return null; }
Исходный Код:
function readSessionStorage(key) { if (typeof window !== 'undefined') { return JSON.parse(window.sessionStorage.getItem(key)); } return null; }
Комментарии:
1. 2 выглядит нормально. 3 выглядит странно, как вы думаете, бывают ли ситуации, когда код не будет выполняться в браузере? (в этом случае звонить
readSessionStorage
вообще не имело бы особого смысла, ИМО)2. Я совершенно уверен, что 2 должно работать, но хотел быть в полной безопасности с исходным кодом (прилагается в конце).
3. Что вы на самом деле пытаетесь поймать
4. @Bergi, я пытался
return null
сделать это для любого другого сценарияtypeof window !== 'undefined'
, но блокировка файлов cookie приводила к ошибке DOMException, и я не нашел другого способа справиться с этим. Поэтому я попробовал попробовать…поймать, и это сработало, но проблема была в том , как вы видитеOption 1
, я дважды возвращал значение null и думал, как я могу просто вернуть его один раз. И это без нарушения чего-либо в исходном коде (в конце вопроса). Я не был на 100% уверен, что try…catch должен позаботиться обо всем, может быть, я просто слишком усложняюсь, и 2 просто отлично работает.5. Ах, если вы не пытаетесь поймать ошибки синтаксического анализа JSON, я бы предложил перенести доступ к хранилищу в отдельную часть. Но в любом случае вариант 2 совершенно прост и понятен.