DEV Community

Marcos Felipe
Marcos Felipe

Posted on • Originally published at Medium on

Lidando com valores booleanos no JavaScript

Photo by George Bosela from FreeImages.

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.

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.

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.

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

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.

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.

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.

E para muitos o quesito performance é extremamente importante, mesmo que ela seja miníma, para tirar essa dúvida temos um teste de performance que utiliza as 3 abordagens. Aparentemente o !! é o mais rápido.

Espero que isso te ajude de alguma forma.

Twitter : https://twitter.com/omarkdev

Github : https://github.com/omarkdev


Top comments (0)