Conversione Automatica dei Tipi di Dati
Come già sapete, le stringhe in JavaScript dovrebbero essere racchiuse tra virgolette. Può succedere che tutti i caratteri della stringa siano cifre:
let a = '123';
In questo caso la variabile a è anche essa una
stringa, ma con una certa particolarità.
Il punto è il seguente: se su una stringa con cifre si esegue un'operazione matematica - questa operazione verrà eseguita come se avessimo effettivamente dei numeri, e non delle stringhe:
alert('2' * '3'); // visualizzerà 6
In questo caso JavaScript vede che stiamo tentando di eseguire un'operazione non consentita per le stringhe, ma consentita per i numeri.
Vede anche che, di fatto, le nostre stringhe sono numeri tra virgolette. Pertanto JavaScript esegue automaticamente la conversione di queste stringhe in numeri ed esegue la corrispondente operazione matematica su di essi.
Questo funziona se nelle nostre stringhe ci sono solo
cifre. Se ci fosse almeno una lettera
- JavaScript considererà l'operazione non corretta
e ne farà risultare il valore NaN:
alert('2' * '3s'); // visualizzerà NaN
Inoltre, la conversione automatica avviene se l'operazione è matematicamente corretta, ma non consentita per le stringhe.
Ad esempio, le stringhe non possono (mentre i numeri sì) essere moltiplicate, divise, sottratte, quindi in tutte queste operazioni ci sarà una conversione automatica delle stringhe con cifre in numeri.
Tuttavia, le stringhe, come i numeri, vengono sommate
tramite l'operatore +. Ciò significa
che nel caso dell'addizione non ci sarà una conversione automatica
:
let a = '1' + '2';
alert(a); // visualizzerà '12' - è avvenuta una concatenazione di stringhe
Se uno degli addendi è un numero, e l'altro - una stringa, vince sempre la stringa:
let a = 1 + '2';
alert(a); // visualizzerà '12'
In questi casi JavaScript, al contrario, converte automaticamente i numeri in stringhe ed esegue la concatenazione delle stringhe.
Ci sono, tuttavia, delle particolarità quando gli addendi sono più di due: in questo caso la conversione a un tipo specifico dipende dall'ordine di esecuzione delle operazioni.
Nel seguente esempio prima 2 e 3
verranno sommati come numeri, e poi il risultato verrà aggiunto
alla stringa '1' già come stringa '5',
che alla fine darà la stringa '15':
let a = '1' + (2 + 3);
alert(a); // visualizzerà '15'
Se invece si tolgono le parentesi, tutto verrà sommato
da sinistra a destra. Cioè prima alla stringa '1'
verrà aggiunto il numero 2 e di conseguenza
si otterrà la stringa '12'. Poi a questa
stringa verrà aggiunto il numero 3 e di conseguenza
si otterrà la stringa '123':
let a = '1' + 2 + 3;
alert(a); // visualizzerà '123'
Ma nel seguente esempio i numeri 2
e 3 sono scritti all'inizio, quindi prima
verranno sommati come numeri, dando come risultato
il numero 5, e poi a questo numero verrà aggiunta
la stringa '1', dando alla fine la stringa '51':
let a = 2 + 3 + '1';
alert(a); // visualizzerà '51'
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' + '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' + 2;
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = 5 + '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = 5 + 2;
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' * '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' - '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' / '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' % '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5s' * '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5s' + '2';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = (-'5') + (-'2');
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' * 1 + '2' * 1;
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '5' * '1' + '2' * '1';
alert(a);
Senza eseguire il codice, determina cosa verrà visualizzato sullo schermo:
let a = '' + 3 + 1;
alert(a);