Alternancia de atributos sin valores

Supongamos que tenemos un input bloqueado y un botón:

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

Hagamos que cada clic en el botón cambie el estado del input - de bloqueado a desbloqueado y viceversa. Primero, obtengamos referencias a nuestros elementos en variables:

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

Y ahora implementemos lo planeado:

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

Sin embargo, la tarea se puede resolver con menos código:

javascriptbutton.addEventListener('click', function() {
  elem.disabled = !elem.disabled;
});
Задание 1

Explique cómo funciona el código proporcionado.

Задание 2

Dada una casilla de verificación y un botón. Haga que cada clic en el botón cambie el estado de la casilla de verificación.