Элегантный способ вернуться из try…catch — Javascript

#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 совершенно прост и понятен.