Converta verdadeiro ou falso em um booleano explícito

97

Eu tenho uma variável. Vamos chamá-lo toto.

Este totopode ser configurado para undefined, null, uma string, ou um objeto.

Gostaria de verificar se totoestá definido como um dado, o que significa definir como uma string ou um objeto, e nem undefinednem null, e definir o valor booleano correspondente em outra variável.

Pensei na sintaxe !!, que seria assim:

var tata = !!toto; // tata would be set to true or false, whatever toto is.

O primeiro !seria definido como falseif toto é undefinedou nulle trueelse, e o segundo seria invertido.

Mas parece um pouco estranho. Então, existe uma maneira mais clara de fazer isso?

Já olhei para esta questão , mas quero definir um valor em uma variável, não apenas verificá-lo em uma ifinstrução.

Aracthor
fonte
10
Esta questão está marcada como duplicada, mas se você olhar para a outra questão stackoverflow.com/questions/263965/… é bem diferente; eles não são duplicados de forma alguma
Sam
@Sam Desculpe, mas eu confirmei esta duplicata, eu não sabia sobre esta outra pergunta, mas resolveu meu problema.
Aracthor 01 de
11
@Aracthor NÃO é uma duplicata, porque stackoverflow.com/questions/263965/… trata da conversão de strings contendo apenas as palavras "true" e "false" em suas contrapartes booleanas. Esta questão é sobre a conversão de QUALQUER variável em um booleano com base no fato de ser verdadeira ou falsa.
Alan McBee - MSFT

Respostas:

153

Sim, você sempre pode usar isto:

var tata = Boolean(toto);

E aqui estão alguns testes:

for (var value of [0, 1, -1, "0", "1", "cat", true, false, undefined, null]) {
    console.log(`Boolean(${typeof value} ${value}) is ${Boolean(value)}`);
}

Resultados:

Boolean(number 0) is false
Boolean(number 1) is true
Boolean(number -1) is true
Boolean(string 0) is true
Boolean(string 1) is true
Boolean(string cat) is true
Boolean(boolean true) is true
Boolean(boolean false) is false
Boolean(undefined undefined) is false
Boolean(object null) is false
Robo Robok
fonte
75
Observe que Boolean ("false") é verdadeiro, quando você provavelmente deseja que seja falso.
Sterling Bourne de
45
Por que diabos você gostaria que a string "false" fosse falsa? Mesmo php não faz isso: D
Danon
1
Ele quer dizer Boolean("false").
Robo Robok de
2
@NoahDavid Retorna verdadeiro. A única string lançada falseé uma string vazia ( "").
Robo Robok
6
Exatamente. É por isso que você deve ter cuidado ao usar a frase "false" se estiver entre aspas e, portanto, for interpretada como uma String. Você pode pensar que está convertendo para falso, mas na verdade ele retornará verdadeiro - daí o aviso original.
Sterling Bourne
0

Você pode usar Boolean(obj)ou !!objpara converter truthy/falsypara true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
yaya
fonte