| Tipo | Esempio | Nota |
|---|---|---|
| Tipi primitivi | passati per valore | |
| Tipi riferimento | passati per riferimento | |
| Falsy values | tutto il resto è truthy, anche [] e {} |
typeof restituisce una stringa che indica il tipo del valore.| Famiglia | Operatori | Uso tipico |
|---|---|---|
| Aritmetici | calcoli numerici | |
| Assegnazione | aggiornare una variabile | |
| Confronto | confrontare valori; preferire === |
|
| Logici | combinare condizioni e gestire fallback | |
| Accesso/fallback | evitare errori e usare fallback mirati | |
| Incremento | aumentare o diminuire di 1 |
| Contesto | Esempio | Cosa succede |
|---|---|---|
| Conversione esplicita | String(123) |
converte il numero in stringa |
Number('42') |
converte una stringa numerica in numero | |
Boolean(0) |
0 diventa false |
|
+ con stringhe |
"5" + 2 |
concatena se c’è una stringa |
| Operatori numerici | "5" - 2 |
convertono in numero |
| Confronto debole | "5" == 5 |
== fa coercizione tra tipi diversi |
| Confronto stretto | "5" === 5 |
=== confronta anche il tipo |
+ concatena quando entra una stringa; -, *, / convertono in numero.== fa conversione automatica di tipo, === confronta anche il tipo.String(), Number() o Boolean().|| e ?? non sono equivalenti: con ?? il fallback scatta solo con null o undefined.| Metodo | Restituisce | Modifica originale? | Uso tipico |
|---|---|---|---|
| nuovo array | no | tenere solo certi elementi | |
| nuovo array | no | trasformare ogni elemento | |
elemento o undefined |
no | primo elemento che soddisfa | |
| valore singolo | no | somme, aggregazioni | |
boolean |
no | verifica presenza | |
| nuova lunghezza | si | aggiunge in fondo | |
| elementi rimossi | si | rimuove o inserisce in posizione |
I metodi che non modificano l’originale si compongono bene in catena.
| Forma | Sintassi | Quando usarla |
|---|---|---|
| Function declaration | funzioni principali con un nome chiaro | |
| Arrow function | callbacks, funzioni brevi, .forEach ecc. |
|
| Funzione asincrona | funzioni che usano ritornano implicitamente una |
render, handleSubmit, caricaDati.Oggetto letterale — utile per uno stato unico:
this dentro un metodo si riferisce all’istanza corrente.new crea una nuova istanza e chiama constructor.Cosa otteniamo?
Cosa contiene risultato?
Risposta
[20, 40]
filter tiene solo i pari (2, 4), poi map li moltiplica per 10. L’array originale numeri non viene modificato.
BooleanVero o falso?
Quale delle due affermazioni è corretta?
false, perché 0 e "" sono tipi diversitrue, perché entrambi sono falsy e diventano falseRisposta
B — true.
Boolean(0) → false, Boolean("") → false, quindi false === false → true.
Attenzione: Boolean([]) → true e Boolean({}) → true. Array e oggetti vuoti sono sempre truthy.
find?Osserva questo codice
Che valore ha adulto? Che tipo è?
| Operazione | Strumento | Nota |
|---|---|---|
| Selezionare un elemento | restituisce il primo, o null |
|
| Selezionare più elementi | restituisce NodeList (iterabile) |
|
| Ascoltare un evento | separare logica da render | |
| Delegazione eventi | un solo listener per molti figli |
| Operazione | Strumento | Nota |
|---|---|---|
| Cambiare il testo | meglio di innerHTML per testo |
|
| Struttura HTML dinamica | utile per svuotare o creare HTML | |
| Aggiungere/rimuovere classe | meglio di el.className |
|
| Creare un nodo | non ancora in pagina | |
| Inserire nel DOM | append accetta anche stringhe |
|
| Rimuovere un nodo | rimuove il nodo dal DOM |
querySelectorAllQuanti listener vengono registrati?
Se ci sono 5 bottoni in pagina, quante volte viene chiamato addEventListener?
Risposta
5 volte — una per ogni elemento selezionato.
Alternativa con delegazione: un solo listener sul contenitore padre, poi event.target per identificare quale bottone ha ricevuto il click. Utile quando i figli vengono creati dinamicamente.
event.targetQual è l’elemento cliccato?
Cosa succede se clicchiamo il testo dentro al bottone? E se clicchiamo fuori dal bottone?
Risposta
button, il codice legge dataset.id e rimuove l’elemento.button, fa return e non succede nulla.event.target.Perché svuotiamo prima?
Perché svuotiamo container prima di ricrearne il contenuto?
Risposta
render deve rappresentare lo stato attuale (items).Pattern applicazione:
array.push, array.splice, …)render(stato) → svuota container → ricrea nodiLo stato è la fonte di verità. Il DOM è solo il suo riflesso.
| Fase | Strumento | Nota |
|---|---|---|
| Intercettare invio | blocca il refresh automatico | |
| Leggere i campi | raccoglie i campi con name |
|
| Pulire il form | dopo il salvataggio | |
| Mostrare errori | scrivere in <span> o <p> con classe .error |
visibile, non solo alert |
| Persistenza locale | serializzare prima di salvare |
Osserva questo listener
Manca qualcosa. Qual è il problema?
Risposta
Manca event.preventDefault().
Senza di esso, il browser esegue il comportamento predefinito del form: invia una richiesta HTTP e ricarica la pagina. Tutto il codice JS dopo push viene eseguito, ma immediatamente dopo la pagina si azzera.
Prima riga del listener: sempre event.preventDefault().
JSON.stringify e localStorageCosa viene salvato?
Qual è la differenza tra i due casi?
Risposta
localStorage salva solo stringhe.
"[object Object]". Se poi proviamo a fare JSON.parse("[object Object]"), otteniamo un errore.'[{"nome":"Anna","email":"anna@mail.com"}]'. JSON.parse restituisce l’array originale.Regola: JSON.stringify prima di setItem, JSON.parse dopo getItem.
| Concetto | API / sintassi | Nota |
|---|---|---|
| Avviare richiesta | restituisce una Promise contenente Response |
|
| Controllare esito | fetch non rigetta su errori HTTP 4xx/5xx |
|
| Leggere JSON | asincrono, restituisce un oggetto | |
| Catena Promise | errori propagano fino al primo .catch |
|
| Async/await | sintassi lineare sulle Promise | |
| Gestione errori | equivalente di .catch() |
|
| Richieste parallele | aspetta tutte; rigetta se una fallisce |
fetch| Caso | Comportamento |
|---|---|
| Errore di rete | fetch rigetta la Promise (catch) |
| Errore HTTP (es. 404, 500) | fetch risolve la Promise, ma response.ok è false |
Dobbiamo controllare sempre
response.ok(oresponse.status) dopoawait fetch(...).
fetch e codici HTTPQuesto codice gestisce un 404?
Se il server risponde con 404 Not Found, cosa succede?
Dove finisce l’errore?
Se il primo .then lancia un errore, quale step viene eseguito dopo?
Risposta
L’errore salta il secondo .then e viene gestito direttamente nel .catch in fondo alla catena.
Un errore in qualsiasi punto della catena .then si propaga verso il basso fino al primo .catch disponibile. Il secondo .then (render) viene saltato completamente.
async/await senza try/catchCosa manca?
Il codice controlla response.ok, ma c’è ancora un caso non gestito. Quale?
Risposta
Manca la gestione degli errori di rete: se il dispositivo è offline o il server non risponde, fetch rigetta la Promise e l’errore non viene intercettato.
La funzione async restituisce una Promise rigettata che, se non gestita, produce un UnhandledPromiseRejection.
Soluzione:
Promise.all e fail-fastCosa succede se una fallisce?
Se la seconda richiesta restituisce un errore di rete, cosa succede all’intera Promise.all?
Risposta
Promise.all ha comportamento fail-fast: rigetta immediatamente non appena una qualsiasi Promise nella lista rigetta. La prima richiesta potrebbe essere già completata, ma il suo risultato viene scartato.
Niccolò Maltoni