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.+

[image or embed]

— Filipe M. Silva (@flpms.me) September 3, 2024 at 10:57 AM

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