JS para impacientes

1: Qual é a diferença entre undefined e null?

February 01, 2020

undefined: valor primitivo utilizado quando uma variável não teve valor atribuído

null: valor primitivo que representa a ausência intencional de um valor de objeto

Antes de entender as diferenças entre undefinednull devemos entender as semelhanças entre eles.

  • Eles pertencem aos 7 tipos primitivos do JavaScript .
 let primitiveTypes = [
    'string',
    'number',
    'null',
    'undefined',
    'boolean',
    'symbol', 
    'bigint'
]
  • Eles são valores falsos. Valores avaliados como falso ao convertê-lo em booleano, usando: Boolean(value) ou !!value.
   console.log('!!null: ',!!null) //logs false
   console.log('!!undefined: ',!!undefined) //logs false

   console.log('Boolean(null): ',Boolean(null)) //logs false
   console.log('Boolean(undefined): ',Boolean(undefined)) //logs false

Ok, vamos falar sobre as diferenças:

  • undefined é o valor padrão de uma variável que não recebeu um valor específico. Ou uma função que não tem valor de retorno explícito ex. console.log(1). Ou uma propriedade que não existe em um objeto. Exemplo:
  let _thisIsUndefined
  console.log('_thisIsUndefined', _thisIsUndefined) //logs undefined

  const doNothing = () => {}
  console.log(doNothing()) //logs undefined

  const someObj = {
    a : "ay",
    b : "bee",
    c : "si"
  }
  console.log(someObj["d"]) //logs undefined
  • null é “um valor que não representa nada”, mas que teve uma atribuição! null é um valor que foi definido explicitamente para uma variável. 

Neste exemplo, obtemos um valor de null quando o método fs.readFile não gera um erro (por baixo dos panos, alguém atribuiu o valor null a variável).

  fs.readFile('path/to/file', (e,data) => {
     console.log(e) //it logs null when no error occurred
     if(e){
       console.log(e)
     }
     console.log(data)
   })

Ao compararmos nullundefined obtermos true ao usar == (estranho né?)

e obtemos false ao usar ===. Vou explicar a diferença em breve.

   console.log(null == undefined) // logs true
   console.log(null === undefined) // logs false

Baseado no excelente artigo: 70 Interview Questions


Está curtindo os conteúdos da Reativa? Quer que a gente te ajude a ser um dev melhor? Clique aqui.