15.5 Tipi di dati primitivi null, undefined e boolean
iniziamo col parlare di 2 tipi di dati primitivi null e undefined e delle loro differenze.
Il null è un costrutto che rappresenta un’ assenza di contenuto o un oggetto privo di valore.
Esiste un metodo per verificare il tipo di oggetto che dobbiamo considerare che si chiama typeof() .
null; document.write(typeof(null));
Ci restituisce object, alcuni dicono che quest sia un bug di js, infatti se faccio imposto una variabile uguale null e chiedo se il tipo di quella variabile è diverso da null mi restituisce TRUE
let pippo = null; document.write( typeof(pippo)!== null );
null è un costrutto letterale di js e non fa parte di nessun altro oggetto, nemmeno di quello globale window che corrisponde alla finestra del browser. Qualsiasi variabile che dichiariamo entra a far parte dell’oggetto globale window, null invece no.
undefined invece appartiene all’oggetto window, non può essere sovrascritta e rappresenta un oggetto con valore non definito
let cognome;
Questo è un esempio di variabile inizializzata con valore undefined, se visualizziamo il typeof() ci restituisce undefined. Spesso il null è identificato come undefined, infatti js se li confrontiamo ci risponde TRUE
document.write(null == undefined);
In realtà non sono dello stesso tipo, infatti se li confrontiamo con l’operatore strict ( === ) restituisce FALSE
document.write(null === undefined);
Infatti se scrivo
let cognome; document.write(cognome);
mi restituisce undefined, ma se stampo invece
document.write(paperino);
ottengo un errore di variabile non definita e lo script si blocca.
Boolean
Vediamo le caratteristiche delle variabili BOOLEAN:
- Possono avere solo due valori: TRUE e FALSE
- Questi valori sono case sensitive: True è diverso da true e False è diverso da false
- I seguenti valori sono considerati sempre false: false, null, undefined, 0, NaN, stringa vuota.
- Tutti gli altri valori sono TRUe in una condizione booleana: anche new Boolean(false) è TRUE perchè è un oggetto
let mioValore = false; let valoreDue = true; document.write(mioValore); document.write(valoreDue);
Ottengo ovviamente la stampa di FALSE e TRUE, ma se scrivo
let mioValore = False; let valoreDue = True; document.write(mioValore); document.write(valoreDue);
ottengo un errore perchè js non li riconosce con la lettera iniziale maiuscola, invece scrivendoli come stringhe
let mioValore = "FALSE"; let valoreDue = "True"; document.write(mioValore); document.write(valoreDue);
js li riconosce e li converte in booleani.
Esiste un oggetto predefinito, che è l’oggetto Boolean() che restituisce se un’espressione è vera o falsa.
var bool = Boolean(6>7); document.write(bool);
la variabile bool odi tipo booleano, varrà false.
Posso creare un nuovo oggetto tramite Boolean
let bool1 = new Boolean("Hello");
ma non sarebbe un variabile di tipo primitivo booleano, infatti
let bool1 = new Boolean("Hello"); let bool2 = Boolean("Hello"); document.write(bool1===bool2);
ottengo FALSE perchè bool1 è un oggetto, mentre bool2 è un boolean (con l’operatore debole == otterrei TRUE perchè hanno lo stesso valore).
Per fare il casting in boolean di una variabile, basta mettere davanti al suo identificatore il doppio segno di negazione !!
let bool1 = 12; let bool2 = !!bool; document.write(typeof(bool1) ); document.write(typeof(bool2) );
mi restituisce bool1 come number, mentre bool2 come boolean. Non è consigliato invece fare il cast con new Boolean(), in quanto restituisce un oggetto e non un dato primitivo, infatti
let test = new Boolean(0); if (test) { document.write("test è vero"); }
l’if restituisce TRUE, dovrei applicare la condizione al suo valore, tramite il metodo valueOf()
let test = new Boolean(0); if (test.valueOf()) { document.write("test è vero"); } else {document.write("test è falso");}
per ottenere la condizione falsa