Convertir verdadero o falso en un booleano explícito

98

Tengo una variable. Vamos a llamarlo toto.

Esto totose puede configurar para undefined, null, una cadena o un objeto.

Me gustaría comprobar si totose establece en un dato, lo que significa establecer en una cadena o un objeto, y ni en undefinedni null, y establecer el valor booleano correspondiente en otra variable.

Pensé en la sintaxis !!, que se vería así:

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

El primero !se establecería en falseif toto es undefinedo nully trueelse, y el segundo lo invertiría.

Pero parece un poco extraño. Entonces, ¿hay una forma más clara de hacer esto?

Ya miré esta pregunta , pero quiero establecer un valor en una variable, no solo verificarlo en una ifdeclaración.

Aracthor
fuente
10
Esta pregunta está marcada como un duplicado, pero si observa la otra pregunta stackoverflow.com/questions/263965/… es bastante diferente; no son duplicados en absoluto
Sam
@Sam Lo siento, pero me confirmé este duplicado, no sabía sobre esta otra pregunta, pero resolvió mi problema.
Aracthor
11
@Aracthor NO es un duplicado, porque stackoverflow.com/questions/263965/… se trata de convertir cadenas que contienen solo las palabras "verdadero" y "falso" a sus contrapartes booleanas. Esta pregunta trata de convertir CUALQUIER variable en un booleano en función de si es verdadera o falsa.
Alan McBee - MSFT

Respuestas:

154

Sí, siempre puedes usar esto:

var tata = Boolean(toto);

Y aquí hay algunas pruebas:

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
fuente
75
Es de destacar que Boolean ("falso") es verdadero, cuando probablemente desee que sea falso.
Sterling Bourne
45
¿Por qué demonios le gustaría que la cadena "falso" fuera falso? Incluso php no hace eso: D
Danon
1
Quiere decir Boolean("false").
Robo Robok
2
@NoahDavid Devuelve verdadero. La única cuerda lanzada afalse es una cadena vacía ( "").
Robo Robok
6
Exactamente. Es por eso que debe tener cuidado al usar la frase "falso" si está entre comillas y, por lo tanto, se interpreta como una cadena. Puede pensar que lo está convirtiendo en falso, pero de hecho devolverá verdadero, de ahí la advertencia original.
Sterling Bourne
0

Puede usar Boolean(obj)o !!objpara convertir truthy/falsya true/false.

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