Zamień prawdziwe lub fałszywe na jawną wartość logiczną

101

Mam zmienną. Nazwijmy to toto.

Może tototo być ustawione na undefined, nullciąg lub obiekt.

Chciałbym sprawdzić, czy totojest ustawiony na dane, co oznacza ustawiony na ciąg lub obiekt, a nie na undefinedani null, i ustawić odpowiednią wartość logiczną w innej zmiennej.

Pomyślałem o składni !!, która wyglądałaby tak:

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

Pierwsza !byłaby ustawiona na, falsejeśli toto jest undefinedlub nulli trueinaczej, a druga odwróciłaby to.

Ale wygląda to trochę dziwnie. Czy jest więc jaśniejszy sposób na zrobienie tego?

Już przyjrzałem się temu pytaniu , ale chcę ustawić wartość w zmiennej, a nie tylko sprawdzić to w ifinstrukcji.

Aracthor
źródło
10
To pytanie jest oznaczone jako zduplikowane, ale jeśli spojrzysz na inne pytanie stackoverflow.com/questions/263965/ , jest zupełnie inne; w ogóle nie są duplikatami
Sam
@Sam Przepraszam, ale potwierdziłem sobie ten duplikat, nie wiedziałem o tym innym pytaniu, ale rozwiązało to mój problem.
Aracthor
11
@Aracthor NIE jest to duplikat, ponieważ stackoverflow.com/questions/263965/… dotyczy konwersji ciągu znaków zawierającego tylko słowa „true” i „false” na ich logiczne odpowiedniki. To pytanie dotyczy konwersji DOWOLNEJ zmiennej na wartość logiczną na podstawie tego, czy jest ona prawdziwa, czy fałszywa.
Alan McBee - MSFT

Odpowiedzi:

160

Tak, zawsze możesz tego użyć:

var tata = Boolean(toto);

A oto kilka testów:

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

Wyniki:

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
źródło
75
Warto zauważyć, że wartość logiczna („false”) jest prawdą, gdy prawdopodobnie chcesz, aby była fałszywa.
Sterling Bourne
46
Dlaczego, u licha, chciałbyś, aby napis „false” był fałszywy? Nawet php tego nie robi: D
Danon,
1
On ma na myśli Boolean("false").
Robo Robok,
2
@NoahDavid Zwraca prawdę. Jedynym rzutowanym łańcuchem falsejest pusty ciąg ( "").
Robo Robok
7
Dokładnie. Dlatego musisz być ostrożny, używając wyrażenia „false”, jeśli jest ono w cudzysłowie i dlatego jest interpretowane jako łańcuch. Możesz pomyśleć, że rzucasz to na fałsz, ale w rzeczywistości zwróci prawdę - stąd oryginalne ostrzeżenie.
Sterling Bourne
2

Możesz użyć Boolean(obj)lub !!objdo konwersji truthy/falsyna true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
yaya
źródło