Чередование атрибутов без значений

Пусть дан заблокированный инпут и кнопка:

<input id="elem" disabled> <input id="button" type="submit">

Давайте сделаем так, чтобы каждое нажатие на кнопку приводило к смене состояния кнопки - с заблокированного на заблокированное и наоборот.

Для начала получим ссылки на наши элементы в переменные:

let elem = document.querySelector('#elem'); let button = document.querySelector('#button');

А теперь реализуем задуманное:

button.addEventListener('click', function() { if (elem.disabled) { elem.disabled = false; } else { elem.disabled = true; } });

Задачу, однако, можно решить меньшим количеством кода:

button.addEventListener('click', function() { elem.disabled = !elem.disabled; });

Объясните, как работает приведенный код.

Дан чекбокс и кнопка. Сделайте так, чтобы каждый клик по кнопке приводил к смене состояния чекбокса.