Per chi proviene da un linguaggio fortemente tipizzato come Java, imparare JavaScript è molto più difficile di quanto non si pensi. Questo perché JavaScript è un linguaggio debolmente tipizzato in cui la conversione tra tipi di dati avviene implicitamente (casting implicito). I programmatori JavaScript spesso sfruttano questa caratteristica a loro favore, ma per gli altri è un problema.
Consideriamo la seguente funzione che somma due numeri:
var sum = function(a, b) {
var result = a + b;
console.log(result);
};
Ecco come si comporta JavaScript:
Codice | Tipi di dati | Risultato | Tipo del risultato |
---|---|---|---|
sum(1, 2) |
Numero, numero | 3 | Numero |
sum('1', 2) |
Stringa, numero | 12 | Stringa |
sum(true, 2) |
Booleano, numero | 3 | Numero |
sum(undefined, 2) |
undefined, numero | NaN | NaN |
sum(null, 2) |
null, numero | 2 | Numero |
Una soluzione a questo problema è quella di verificare sempre se il tipo di dati passato è corretto:
if(typeof a === 'number' && typeof b === 'number') {
// eseguo l'operazione
}
Un'altra soluzione, meno affidabile, è quella di eseguire il casting in modo esplicito:
var n1 = Number(a);
var n2 = Number(b);
Tuttavia nel caso del valore undefined
questa soluzione peggiora il problema. È sempre meglio verificare in anticipo il tipo
di dati per evitare sorprese.