6 of 17 menu

Errore nell'iterazione di un array con il ciclo for-in in JavaScript

Per iterare un array si dovrebbe utilizzare il ciclo for-of. A volte, però, i principianti erroneamente tentano di applicare il ciclo for-in. Diamo un'occhiata ai segni caratteristici di questo errore.

Supponiamo di avere un array:

let arr = ['a', 'b', 'c'];

Iteriamo gli elementi di questo array e scriviamoli in una singola stringa.

Un certo programmatore ha già risolto questo compito, ma ha erroneamente utilizzato il ciclo for-in. Vediamo cosa ha ottenuto:

let res = ''; for (let elem in arr) { res += elem; } console.log(res); // visualizzerà '012'

Quindi, il risultato è la stringa '012', e non 'abc'. Scopriamo perché è successo.

Perché l'array è stato iterato con il ciclo for-in? Il fatto è che un array in JavaScript è un caso particolare di oggetto. Quindi in realtà da questo punto di vista è un codice corretto. Ma non si dovrebbe fare così.

Il fatto è che for-in in alcune condizioni può includere elementi extra, e oltre agli elementi dell'array potresti ottenere durante l'iterazione qualcos'altro di parassita. Itera gli array solo con for-of.

Ora scopriamo perché vediamo un risultato così strano. Il fatto è che durante l'iterazione con for-in nella variabile elem in realtà andranno le chiavi, nonostante il nome fuorviante di questa variabile.

Correggiamo l'errore commesso e scriviamo il codice corretto:

let arr = ['a', 'b', 'c']; let res = ''; for (let elem of arr) { res += elem; } console.log(res); // visualizzerà 'abc'
Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta