Lidando com valores booleanos no JavaScript
Tags: javascript, boolean
Published: 2020-03-26 14:43:46

---
title: Lidando com valores booleanos no JavaScript
published: true
date: 2020-03-26 14:42:45 UTC
tags: javascript,boolean
canonical_url: 
---

![](https://cdn-images-1.medium.com/max/1024/1*19I_3a8zARS7eg1yO2N_LA.jpeg)<figcaption>Photo by <a href="https://www.freeimages.com/photographer/bosela-36184">George Bosela</a> from <a href="https://www.freeimages.com/">FreeImages</a>.</figcaption>

Sabemos o quão importante são os valores booleanos na maioria das linguagens para se desenvolver software, mas outra coisa que sabemos também é que o JavaScript sempre está nos aguardando com novas surpresas. Lidar com booleanos no JavaScript para muitos é algo extremamente simples que não tem nada de diferente, mas para outros em alguns casos podem existir algumas particularidades não conhecidas, que são bem importante conhecermos para não nos surpreendermos no futuro.

Atualmente, “acreditamos” ter 3 maneiras de se converter valores para booleanos: !!, Boolean e new Boolean.

{% gist https://gist.github.com/omarkdev/9320de1f0e1c50f4ae29c159d560475d %}

Analisando o exemplo extremamente simples, podemos ver que as 3 maneiras funcionaram ao verificarmos se os valores **são iguais** a true. Mesmo ambos funcionando, temos uma particularidade ao usar o new Boolean.

{% gist https://gist.github.com/omarkdev/ec6045e032afa733ff796252b1c3044d %}

Ao verificarmos os tipos das abordagens, vemos que o new Boolean é um objeto de uma instância do booleano ao invés de um tipo primitivo. É importante sempre preferirmos tipos primitivos porque são imutáveis possibilitando compartilhar apenas referências e não ter que manter nenhum estado na instância, consequentemente são mais “baratos”. Além disso, também podemos ter problemas quando lidamos com outro tipo de comparação.

{% gist https://gist.github.com/omarkdev/8e8a7a59e7aaa91da10509d1047024cc %}

Por se tratar de um objeto quando usamos o new Boolean, ao se utilizar o comparador idêntico (onde é verificado se o valor e o tipo são iguais) passamos a ter o resultado false.

### Os valores a serem convertidos

A abordagem escolhida não é a unica coisa importante a se considerar ao se trabalhar com booleanos, os valores a serem convertidos também são, afinal são eles que ditam o resultado. Independente da abordagem que você escolha, o resultado de ambas será o mesmo (obviamente com a particularidade do objeto ao se utilizar new Boolean).

{% gist https://gist.github.com/omarkdev/a341e480650ce13812ecf8f2bf5e5cc9 %}

Quando temos uma string com valores e um número diferente de 0, sempre resultará em true, porém esses não são os únicos valores que podemos lidar no dia-a-dia. Existe também os **_falsy values_** , que são 6 valores que se convertidos em booleano, resultarão em false.

{% gist https://gist.github.com/omarkdev/b6ff7b7156a8a45e30a98fd440ebf428 %}

Conhecendo os **_falsy values_** possíveis, podemos ver que _strings_ vazias e número 0 sempre resultarão em false.

### Qual abordagem escolher?

Cada projeto terá uma ou mais abordagens em seu código e isso é extremamente normal, pois como já vimos cada uma pode ter uma particularidade escondida. Mas se você está se perguntando quando você deve utilizar cada uma, existem algumas idéias que podem te ajudar a refletir sobre isso.

Sabemos que ao utilizar o new Boolean teremos um objeto como resultado, e como também já sabemos, podemos adicionar propriedades aos objetos no JavaScript. Então, se você por algum motivo precisa de mais informações no seu “booleano”, talvez faça sentido seguir com essa abordagem.

{% gist https://gist.github.com/omarkdev/b3f2a41e381532862e26fa936553fda8 %}

Talvez para você utilizar a abordagem Boolean pode ser mais interessante caso você tenha abordagens mais verbosas. Porém a abordagem Boolean não serve apenas para converter valores, por se tratar um construtor, podemos utilizá-lo em alguns trechos onde temos que verificar os nossos **_falsy values_**.

{% gist https://gist.github.com/omarkdev/9886ccad1d5f020264cb73b2a9fb2744 %}

E para muitos o quesito performance é extremamente importante, mesmo que ela seja miníma, para tirar essa dúvida temos um [**_teste de performance_**](https://jsperf.com/boolean-vs-not-not-vs-new-boolean) que utiliza as 3 abordagens. Aparentemente o !! é o mais rápido.

Espero que isso te ajude de alguma forma.

**Twitter** : [_https://twitter.com/omarkdev_](https://twitter.com/omarkdev)  
**Github** : [_https://github.com/omarkdev_](https://github.com/omarkdev)

* * *