Na lógica de "curto circuito", não tinha entendido o motivo da expressão:
const tarefas = JSON.parse(localStorage.getItem('tarefas')) || [ ]
No JS faz com que a parte "JSON.parse(localStorage.getItem('tarefas'))" fosse lida como "falso" quando o resultado fosse vazio.
Quando li o artigo (https://developer.mozilla.org/pt-BR/docs/Glossary/Falsy) consegui entender melhor. Ele diz que o JS faz uma conversão para booleano de toda expressão em que se vê obrigado a tal, como condicionais (como foi o caso do pipe, que significa "ou") e loops.
O MDN chama isso de valor "falsy". O JS transforma valores como null, NaN e undefined (entre outros) como "falso" dentro de uma condicional.
É por isso que colocar const tarefas = null || []
atribui o valor [] a tarefas;
Achei legal e quis compartilhar!