# 2 Formas de Converter Valores para Booleano em JavaScript

O meu favorito é usar !!. É também o método recomendado pelo guia de estilo JavaScript da Airbnb 👍

Boolean(value);!!value;

# Converter Valores para Booleano

# String

const string = 'string';!!string; // trueBoolean(string); // true

# Número

const number = 100;!!number; // trueBoolean(number); // true

# Valores Falsificados

Em JavaScript, existem 6 valores falsificados. Se converter algum destes em boolean, ele irá retornar false.

falseundefinednullNaN0"" (empty string)

Tudo o que não estiver na lista falsa, retornará true 👍

Mais informações sobre isto, pode ler as minhas Notas de Código sobre Valores Falsificados

# Exemplos

Aplicando !! sobre valores falsificados

!!false; // false!!undefined; // false!!null; // false!!NaN; // false!!0; // false!!''; // false

Aplicando Boolean sobre valores falsificados

Boolean(false); // falseBoolean(undefined); // falseBoolean(null); // falseBoolean(NaN); // falseBoolean(0); // falseBoolean(''); // false

# Como o !! funciona

O primeiro ! coagir o valor a um booleano e invertê-lo. Neste caso, !value irá retornar false. Assim, para o inverter para true, colocamos outro ! nele. Daí o uso duplo !!.

const value = 'string';!value; // false!!value; // true

# Cuidado com ‘falso’

const value = 'false';!!value; // trueBoolean(value); // true

Nota o "false" está entre aspas '. Embora diga false, na realidade é uma corda. Sei que a maioria de vós não cairá nesta, mas se forem como eu, talvez queiram apenas estar alerta para estes truques mentais engraçados que as pessoas podem estar a pregar-vos 😂

# Community Input

@tassoevan : gosto de filtrar valores falsificados de arrays como este: myArray.filter(Boolean)

p>@fleonus : Gosto de !+! só para ser fixe e expulsar as pessoas 😛

# Teste de Velocidade

Havia um teste que eu encontrei:

p>booleano vs !!

Parece que o !! é um pouco mais rápido que Boolean

# Qual usar?

Recebi muitos comentários sobre este post. Algumas pessoas preferem o Boolean porque é mais explícito.

Mas, Kyle Simpson do You Don’t Know JS, mencionou que ambos são explícitos.

// better (works explicitly):if (!!a) {}// also great (works explicitly):if (Boolean(a)) {}

Kyle Simpson: YDKJS – Coercion

Não creio que tenha uma grande resposta para si. Conhecerá a sua equipa muito melhor do que eu. Continuarei a usar !! nos meus próprios projectos pessoais, porque é menos dactilografia e compreendo esta sintaxe. Mas se eu estivesse numa equipa, poderia escolher Boolean porque penso que a maioria dos programadores entenderia isso melhor. Não importa qual deles escolher, o mais importante é ser consistente. Não faça um “flip-flop” entre os dois na sua base de código. Escolha uma e mantenha-se fiel a ela 💪

Ainda a um comentário fantástico que recebi:

@patrick_developer: Digo que se deve compreender ambos, caso se apresente uma base de código diferente que utilize cada um deles. Conhecimento é poder.

Por outras palavras, uma não é melhor do que a outra. Esta, eu diria que é mais uma preferência. Portanto, não se pode errar. Mas não se prive da compreensão de ambos. Como Patrick disse, “Conhecimento é poder” 💪

# Evite novos Booleanos

Utilizar Primitivos em vez de Tipos de Objectos

var str = 'str';// Avoidtypeof new Boolean(str); // object// Preferredtypeof Boolean(str); // booleantypeof !!str; // boolean

CJ J.: Vale a pena notar que new Boolean não é um booleano, mas sim um exemplo de Booleano. Os primitivos são mais baratos e devem ser preferidos em relação ao tipo de objecto.

CJ J..: new Boolean(str) devolve um tipo de objecto. Boolean(str) devolve apenas um booleano primitivo. Eu suspeitaria que Boolean(str) é mais rápido que !!str porque é apenas uma operação, mas também é inteiramente possível que os navegadores implementem uma optimização tal que quando virem !! saibam lançar directamente o argumento a um primitivo booleano (em vez de fazerem NOT() duas vezes seguidas).

CJ J..: Os primitivos são baratos porque são imutáveis para que se possa partilhar referências e não ter de manter qualquer estado na instância. É apenas true ou false. Mas new Boolean(str) é um objecto. Tem o seu próprio endereço de memória único e pode manter um estado interno que lhe é único. Isto significa que não pode conter apenas uma referência a uma instância de um único botão imutável. Cada chamada para new Boolean(str) instancia todo um novo Boolean() objecto.

agradecimentos: CJ J .

# Remove cordas vazias com Boolean Constructor

CJ J.: Este é o exemplo clássico. Se obtiver uma lista de valores de cordas separadas por vírgulas e quiser filtrar as cordas vazias, pode passar a função construtor booleano para Array.prototype.filter e este irá automaticamente retirar as cordas de comprimento zero deixando apenas uma série de cordas válidas.

var str = 'some,list,,of,values';var arr = str.split(',');arr; // arr.filter(Boolean); // 

Thanks: CJ J .

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *