null e undefined
DISCLAIMER: Na restauração do blog se perdeu essa postagem que era só um link para um thread no bluesky, mas estou remontando todo o texto por aqui.
Vamos detalhar isso e corrigir as aspas. null e undefined fazem parte dos tipos primitivos. (Falando aqui JS puro, JSX, typescript e outros são transpilações) Mas eles não são iguais, todo valor em JS é iniciado recebendo undefined, após receber uma declaração ele muda isso p/ o valor necessário.+
— Filipe M. Silva (@flpms.me) September 3, 2024 at 10:57 AM
[image or embed]
Tem uma diferença, undefined é false value e null vira um “objeto” q será tratado como false value.
Vou atrás da explicação detalhada e melhor sobre
Vamos detalhar isso e corrigir as aspas.
null e undefined fazem parte dos tipos primitivos. (Falando aqui JS puro, JSX, typescript e outros são transpilações)
Mas eles não são iguais, todo valor em JS é iniciado recebendo undefined, após receber uma declaração ele muda isso p/ o valor necessário.
então toda declaração de variável já nasce em JS como undefined e pode ganhar um null na atribução.
Já null vai ser tratado na coerção de tipos e um valor null pode ser computado e ele é definido.
Ex.
let a; // a é undefined
let b = null; // b é definido
(0 + a) // NaN
(0 + b) // 0
Se vcs usarem o strict equality (===) ao invés de comparação comum(==), null vs undefined são tipos diferentes, mas null == undefined, são iguais.
Essa diferença importa em alguma coisa?
Vc pode salvar um tempo de processamento, (marginal e de pouquíssima importância) se optar por usar undefined
No mundo JS pré v8 esse tipo de coisa importava, mas hj os ganhos são quase marginais, então o ideal é manter a consistência
E na spec da Ecma-262 explica td isso de forma simples e melhor