Converti vero o falso in un booleano esplicito


98

Ho una variabile. Chiamiamolo toto.

Questo totopuò essere impostato undefined, nulluna stringa o un oggetto.

Vorrei verificare se totoè impostato su un dato, il che significa impostato su una stringa o un oggetto, e né undefinednull, e impostare il valore booleano corrispondente in un'altra variabile.

Ho pensato alla sintassi !!, che sarebbe simile a questa:

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

Il primo !sarebbe impostato su falsese toto è undefinedo nulle truealtrimenti, e il secondo lo invertirebbe.

Ma sembra un po 'strano. Quindi c'è un modo più chiaro per farlo?

Ho già esaminato questa domanda , ma voglio impostare un valore in una variabile, non solo controllarlo in ifun'istruzione.


10
Questa domanda è contrassegnata come duplicata ma se guardi l'altra domanda stackoverflow.com/questions/263965/… è abbastanza diversa; non sono affatto duplicati
Sam

@ Sam Scusa, ma mi sono confermato questo duplicato, non sapevo di quest'altra domanda, ma ha risolto il mio problema.
Aracthor

11
@Aracthor NON è un duplicato, perché stackoverflow.com/questions/263965/… riguarda la conversione di stringhe contenenti solo le parole "true" e "false" nelle loro controparti booleane. Questa domanda riguarda la conversione di QUALSIASI variabile in un booleano in base al fatto che sia vero o falso.
Alan McBee - MSFT

Risposte:


154

Sì, puoi sempre usare questo:

var tata = Boolean(toto);

Ed ecco alcuni test:

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

Risultati:

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

75
Da notare che Boolean ("false") è vero, quando probabilmente vuoi che sia falso.
Sterling Bourne

45
Perché diavolo vorresti che la stringa "false" fosse falsa? Anche php non lo fa: D
Danon

1
Intende Boolean("false").
Robo Robok

2
@NoahDavid Restituisce vero. L'unica stringa a cui falseviene eseguito il cast è una stringa vuota ( "").
Robo Robok,

6
Esattamente. Ecco perché devi stare attento quando usi la frase "false" se è tra virgolette e quindi interpretata come una stringa. Potresti pensare che lo stai trasmettendo come falso, ma in realtà tornerà vero, da cui l'avvertimento originale.
Sterling Bourne,

0

Puoi usare Boolean(obj)o !!objper convertire truthy/falsyin true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.