Dopo aver imparato a distinguere quando le stringhe equivalgono a TRUE o a FALSE, la serie JS Quiz continua! Siete pronti ad un nuovo shock? Ecco qua!
NOTA: le faccine tristi indicano un risultato che per qualcuno potrebbe essere inaspettato.
Assurdo!? Abbiamo usato l'operatore "===" ma stiamo pur sempre parlando di valori uguali entrambi di tipo stringa, no? Beh... no: nel secondo caso abbiamo confrontato un primitivo con un oggetto. I primitivi sono tre: String, Number, Boolean. Essenzialmente, non sono altro che dei valori, fine. Oltretutto, non essendo oggetti, l'unico modo per estenderli è estendere il loro costruttore, pratica assoltamente sconsigliata a meno che non stiate sviluppando un polyfill. Per farvi capire cosa intendo, ecco un esempio:
Ma se una stringa primitiva non è un oggetto String, com'è possibile che ("ciao".length==4) funzioni? Perchè JavaScript converte temporaneamente i primitivi nei relativi oggetti affinchè ne possano usare i metodi e le proprietà.
Si può fare anche il contrario: convertire gli oggetti nei loro primitivi tramite il metodo valueOf() o la cosiddetta "coercizione del tipo". Ecco alcuni esempi:
Se invece dell'operatore "===" usiamo "==" il problema non sussiste, ma entrambi gli approcci hanno i loro pro e contro. Ricordate però che quello raccomandato è il primo!
Assurdo!? Abbiamo usato l'operatore "===" ma stiamo pur sempre parlando di valori uguali entrambi di tipo stringa, no? Beh... no: nel secondo caso abbiamo confrontato un primitivo con un oggetto. I primitivi sono tre: String, Number, Boolean. Essenzialmente, non sono altro che dei valori, fine. Oltretutto, non essendo oggetti, l'unico modo per estenderli è estendere il loro costruttore, pratica assoltamente sconsigliata a meno che non stiate sviluppando un polyfill. Per farvi capire cosa intendo, ecco un esempio:
Si può fare anche il contrario: convertire gli oggetti nei loro primitivi tramite il metodo valueOf() o la cosiddetta "coercizione del tipo". Ecco alcuni esempi:
Commenti
Posta un commento