# 2 modi per convertire valori in booleani in JavaScript

Il mio preferito è usare !!. È anche il metodo raccomandato dalla guida di stile JavaScript di Airbnb 👍

Boolean(value);!!value;

# Convertire valori in booleani

# String

const string = 'string';!!string; // trueBoolean(string); // true

# Number

const number = 100;!!number; // trueBoolean(number); // true

# Falsy Values

In JavaScript, ci sono 6 valori falsi. Se si converte uno di questi in un boolean, esso restituirà false.

falseundefinednullNaN0"" (empty string)

Tutto ciò che non è nella lista falsy, restituirà true 👍

Maggiori informazioni su questo, puoi leggere le mie Note sul codice sui valori falsy

# Esempi

Applicando !! ai valori falsy

!!false; // false!!undefined; // false!!null; // false!!NaN; // false!!0; // false!!''; // false

Applicazione di Boolean su valori falsificati

Boolean(false); // falseBoolean(undefined); // falseBoolean(null); // falseBoolean(NaN); // falseBoolean(0); // falseBoolean(''); // false

# Come funziona il !funziona

Il primo ! coercizza il valore in un booleano e lo inverte. In questo caso, !value restituirà false. Quindi, per invertirlo di nuovo in true, mettiamo un altro ! su di esso. Da qui il doppio uso !!.

const value = 'string';!value; // false!!value; // true

# Attenzione al ‘falso’

const value = 'false';!!value; // trueBoolean(value); // true

Nota che il "false" è tra virgolette '. Anche se c’è scritto false, in realtà è una stringa. So che la maggior parte di voi non ci cascherà, ma se siete come me, potreste voler stare attenti a questi divertenti trucchi mentali che la gente potrebbe giocarvi 😂

# Community Input

@tassoevan : Mi piace filtrare i valori falsi dagli array come questo: myArray.filter(Boolean)

@fleonus : Mi piace !+! solo per essere figo e buttare fuori la gente 😛

# Speed Test

Ecco un test che ho trovato:

boolean vs !!

Sembra che il !! sia un po’ più veloce del Boolean

# Quale usare?

Ho ricevuto molti commenti su questo post. Alcune persone preferiscono il Boolean perché è più esplicito.

Ma, Kyle Simpson di You Don’t Know JS, ha detto che entrambi sono espliciti.

// better (works explicitly):if (!!a) {}// also great (works explicitly):if (Boolean(a)) {}

Kyle Simpson: YDKJS – Coercion

Non credo di avere una grande risposta per te. Conoscerete la vostra squadra molto meglio di me. Continuerò ad usare !! nei miei progetti personali, perché è meno digitato e capisco questa sintassi. Ma se fossi in un team, potrei scegliere Boolean perché penso che la maggior parte degli sviluppatori lo capirebbe meglio. Non importa quale scegliete, la cosa più importante è essere coerenti. Non saltellare tra i due nella tua base di codice. Sceglietene uno e mantenetelo 💪

Alla fine di un commento fantastico che ho ricevuto:

@patrick_developer: Io dico che uno dovrebbe capirli entrambi nel caso in cui uno si trovi di fronte a diverse basi di codice che usano ciascuno di essi. La conoscenza è potere.

In altre parole, uno non è meglio dell’altro. Questo direi che è più una preferenza. Quindi non si può sbagliare. Ma non privatevi di capire entrambi. Come disse Patrick, “La conoscenza è potere” 💪

# Evita i nuovi booleani

Usa i primitivi invece dei tipi di oggetto

var str = 'str';// Avoidtypeof new Boolean(str); // object// Preferredtypeof Boolean(str); // booleantypeof !!str; // boolean

CJ J.: Vale la pena notare che new Boolean non è un booleano ma piuttosto un’istanza di Boolean. Le primitive sono più economiche e dovrebbero essere preferite al tipo di oggetto.

CJ J.: new Boolean(str) restituisce un tipo di oggetto. Boolean(str) restituisce solo un booleano primitivo. Sospetto che Boolean(str) sia più veloce di !!str perché è una sola operazione, ma è anche del tutto possibile che i browser implementino un’ottimizzazione tale che quando vedono !! sanno di lanciare direttamente l’argomento a una primitiva booleana (invece di fare effettivamente NOT() due volte di seguito).

CJ J.: Le primitive sono economiche perché sono immutabili in modo da poter condividere i riferimenti e non dover mantenere alcuno stato sull’istanza. È solo true o false. Ma new Boolean(str) è un oggetto. Ha il suo indirizzo di memoria unico e può contenere uno stato interno che è unico per lui. Questo significa che non può semplicemente tenere un riferimento a un’istanza singleton immutabile. Ogni chiamata a new Boolean(str) istanzia un intero nuovo Boolean() oggetto.

Grazie: CJ J.

# Rimuovere le stringhe vuote con il costruttore booleano

CJ J.: Questo è il classico esempio. Se ottenete una lista di valori di stringhe separate da virgole e volete filtrare le stringhe vuote, potete passare la funzione booleana del costruttore in Array.prototype.filter ed essa eliminerà automaticamente le stringhe di lunghezza zero lasciando un array di sole stringhe valide.

var str = 'some,list,,of,values';var arr = str.split(',');arr; // arr.filter(Boolean); // 

Grazie: CJ J.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *