Blog / Javascript

Falsy e Truthy Values - Valores considerados verdadeiro e falso em JS

TTulio Faria 07 de ago. de 2017 2 min de leitura
Falsy e Truthy Values - Valores considerados verdadeiro e falso em JS

Hoje eu gostaria de falar sobre um assunto que surgiu nos comentários do vídeo sobre short-circuit e valores padrão.

Eu não comentei sobre que valores são convertidos para verdadeiro ou falso porque, na verdade, eu não sabia que eram chamados de falsy e truthy values, então quero trazer essa racionalização. O exemplo que tínhamos feito era:

let a = null

let b = a || 'teste'

Quando eu passo o valor e o operador ou é atribuído o valor padrão. Existe uma série de valores que fazem ele retornar false e consequentemente ele traria o valor padrão ‘teste’, alguns desses valores são ‘null’, uma string vazia ’ ’, o ‘false’ em si, undefined, que seria o caso de uma entrada no express, outro valor considerado ou convertido para false é o Zero ‘o’ e um último é o NaN.

Existe uma situação, que está documentada no site da mozilla, que é o (document.all)[1]. Ele é bastante utilizado para verificar navegadores antigos, mas vamos focar nos anteriores principalmente para o Node.

Em contrapartida, temos tudo que não são valores passados anteriormente, nesse caso seria retornado o valor ‘true’, por exemplo:

let c = true

Outros valores considerados truthy seriam por exemplo {}, que seria um objetct, um array [], um número qualquer, uma string com algo dentro ‘test’ , um new Date(), um número negativo, float e uma constant em JavaScript (Infinity), que também retornaria True. Por esse motivo em alguns condicionais, como por exemplo:

{
  comments && comments.map()
}

Vai retornar true porque ele é um object, já que podemos iterar sobre os comments, porém se comments for undefined ou algum valor falso que a gente não consiga iterar no Map, ele não executa a instrução. Por esse motivo é interessante que a gente saiba os valores possíveis. Uma observação importante, se nós fizemos a conversão para apenas um, por exemplo:

console.log(42 == true)

Irá retornar False, mas se fizermos isso:

console.log(!!42 == true)

Estamos negando ele para ser true, então irá retornar true. Inicialmente ele não funcionou porque o == não faz essa conversão de tipos, já os &&, que é um operador booleano, força esse valor a ser convertido para truthy ou falsy value. Sempre for fazer comparações desse tipo, é bom fazer com === para que realmente fique idêntico e assim ele realmente verifica se os valores são os mesmos e isso evita qualquer problema no futuro.

Confira o video:

Deixe seu cometário, curta o DevPleno no Facebook, inscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades. Abraço!

T
Escrito por
Tulio Faria

Mestre em Sistemas de Informação pela USP e criador do DevPleno. Iniciou sua carreira como professor com apenas 18 anos em um curso técnico, foram 11 anos em sala de aula formando desenvolvedores fullstack no sul de Minas Gerais.

JavascriptFundamentos
Compartilhar X LinkedIn
Continue lendo

Insights relacionados