Способы устранения ошибки, возникающей при отсутствии элемента

У меня есть кнопка на странице. Но есть он не всегда, а при определённых условиях, заданных на бэкенде. И, соответственно, когда элемента нет, то возникает ошибка: Uncaught TypeError: document.querySelector(...) is null.

Постепенно я пришёл к двум способам решения проблемы.

  1. Классический (недостатки: дополнительная переменная, дополнительная вложенность)
const button = document.querySelector('#showmore');
if (button)
{
  button.onclick = function() { 
      ...
  }
}
  1. Экзотический (недостатки: создание лишнего пустого объекта)
(document.querySelector('#showmore') || {}).onclick = function() {
  ...
}

Мне очень нравится второй способ, т.к. он очень "ненагруженный", и я его воспринимаю, как красивый хак. Но некоторые говорят, что это "плохое решение". Пожалуйста, помогите определиться.


Ответы (1 шт):

Автор решения: Alexander Lonberg

Если версия Chrome ^80

document.querySelector('button[b1]')?.addEventListener('click', () => {
  console.log('b1')
})

// ошибку не должен выдать
try {
  document.querySelector('button[b2]')?.addEventListener('click', () => {
    console.log('b2')
  })
} catch (e) {
  console.log(e)
}
<button b1>button</button>
<!-- <button b2>button</button> -->

К тому же на подходе babel-plugin-proposal-optional-chaining

→ Ссылка