Para programar, iniciamos pela declaração e depois pela atribuição de valor a uma variavel. undefined é uma excessão caracterizada pela tentativa de uso de uma variável sem declaração. Null é o conteúdo ou valor para uma variavel sem valor atribuído. As duas situações são resolvidas com uma programação disciplinada, independente da linguagem.

undefined é uma excessão caracterizada pela tentativa de uso de uma variável sem declaração.

Acredito que não seja o caso de variável sem declaração, mas sim sem atribuição de valor.

let a
// nesse momento, a variável existe, mas não há valor atribuído a ela