Ciao, esattamente come hai detto. Più in generale si parla del casting implicito (o altri termini come "implicit type coercion"), secondo cui l'interprete JavaScript esegue una conversione automatica del tipo di dati per poter risolvere l'espressione.quella stringa serve per dire a JS che si tratta di stringa e quindi deve concatenare e non aggiungere?
La conversione di tipo è comunque stabilita in base a molteplici fattori che possono presentarsi nell'espressione, come i tipi di valore in gioco, i vari operatori, la posizione e la priorità usata per la risoluzione delle singole operazioni e quindi dell'intera espressione.
Qui alcuni riferimenti:
Cosa vuol dire effettuare il cast di un oggetto ad un altro tipo di dato?
Conversioni tra tipi di variabili
Typecasting in Javascript
Ora, il tuo è un esempio relativamente semplice ma può comunque risultare difficile (anche per i meno principianti) comprendere cosa sta avvenendo dietro le quinte per ottenere quel particolare risultato; ci sono poi casi molto più complessi per cui è praticamente impossibile capirne il procedimento per la risoluzione, usato dall'interprete, se non si ha piena conoscenza di tutte le procedure applicate nell'elaborazione. Questo per dire che a livello pratico può essere giusto utile conoscere in linea generale alcuni comportamenti relativi alle operazioni più comuni; sarà poi l'esperienza, e i vari casi che andrai ad incontrare man mano, a determinare l'apprendimento delle varie nozioni utili caso per caso.
In questo caso la "somma" tra un numero e una stringa, forza l'interprete a convertire preventivamente il valore numerico in stringa; quindi si ottiene un "concatenamento" di stringhe.
Per meglio chiarire il procedimento, i passaggi sono questi:
- prima di tutto viene risolta l'espressione tra le parentesi (j + " ") che converte j (numero) in stringa, secondo il principio accennato sopra, restituendo quindi una stringa;
- a questo punto, con lo stesso principio, viene eseguita l'operazione (i + "stringa"), dove "stringa" è chiaramente il risultato della precedente operazione, convertendo quindi anche i (numero) in stringa e restituendo una stringa ottenuta dalla concatenazione di queste due.
Ovviamente in questo caso conta la sequenza nella risoluzione delle varie parti dell'espressione; matematicamente viene risolta per prima la parte tra parentesi, però la stessa espressione può essere scritta in modo più semplice.
Prendendo per buono il fatto che la somma di un valore numerico con una stringa restituisce sempre una stringa, quella stessa espressione può essere scritta in questo modo:
Prima cosa, non serve usare una stringa contenente uno spazio (come hai fatto tu), si può usare una stringa completamente vuota ("").codice:('' + i + j)
La risoluzione adopera lo stesso principio spiegato sopra ma in questo caso abbiamo ottimizzato la sequenza. Trattandosi della somma di una serie di valori tutti allo stesso livello, l'ordine di risoluzione è chiaramente quello matematico, cioè le singole operazioni sono risolte da sinistra a destra.
Sarà quindi risolta prima l'operazione ('' + i), in cui i (numerico) è convertito in stringa, ottenendo quindi una stringa. A quel punto viene risolta la seconda parte ("stringa" + j), con il solito principio. Il risultato sarà quindi la concatenazione dei valori numerici convertiti in stringa.
Spero sia tutto chiaro.
Buon proseguimento
PS: occhio al regolamento di sezione, titoli autoesplicativi delle discussioni e uso dei tag per il codice... vedo già l'ombra di ciro78 che sta arrivando col manganello![]()