6 of 17 menu

JavaScriptにおけるfor-inループでの配列走査の間違い

配列を走査するには、for-ofループを使用するべきです。 しかし、初心者が誤ってfor-inループを適用しようとすることがあります。 この間違いの典型的な特徴を見てみましょう。

次のような配列があるとします:

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

この配列の要素を走査し、1つの文字列に連結してみましょう。

あるプログラマーは既にこの課題を解決しようとしましたが、 誤ってfor-inループを使ってしまいました。 その結果を見てみましょう:

let res = ''; for (let elem in arr) { res += elem; } console.log(res); // '012' と表示される

結果は'abc'ではなく、'012'という文字列になりました。 なぜこのようになったのか、理由を探ってみましょう。

そもそも、なぜfor-inで配列が走査できてしまったのでしょうか? その理由は、JavaScriptにおける配列がオブジェクトの一種であるからです。 したがって、技術的にはこのコードは「正しい」のです。 しかし、このような使い方はすべきではありません。

なぜなら、for-inは特定の条件下で余計なものを取り込んでしまう可能性があり、 配列の要素に加えて、望ましくない何かが走査に含まれてしまう恐れがあるからです。 配列は必ずfor-ofを使って走査してください。

次に、なぜこのような奇妙な結果が得られたのかを理解しましょう。 理由は、for-inを使って走査すると、 変数名elemが誤解を招くものではありますが、 実際にはこの変数にはキー(インデックス)が代入されるからです。

では、この間違いを修正し、正しいコードを書いてみましょう:

let arr = ['a', 'b', 'c']; let res = ''; for (let elem of arr) { res += elem; } console.log(res); // 'abc' と表示される
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否