配列の分割代入で要素が足りないとundefinedになる(デフォルト値の付け方)
配列の分割代入で、元の配列より多い変数を用意すると、対応する要素が無い変数はundefinedになります。各変数にデフォルト値を指定することでこれを防げます。
なぜエラーが出ないのか
出力: undefined
(エラーなし)- JavaScriptは何も報告しません。文法として正しいためです
出力: undefined- 実際の挙動 — 期待した結果と食い違っている箇所
見つけ方- エラーが出ないので、出力を目で確かめるか、コードを目で追うしかありません。この種の誤りが最も発見が遅れます
このエラーが出る典型パターン
パターン1
1 const [first, second, third ] = [1, 2]; ^ 2 console.log(third);
出力: undefined期待: 0 (エラーにはなりません)
配列に対応する要素が無い変数はundefinedになります。分割代入の変数にデフォルト値を指定すれば、要素が無いときだけその値が使われます。
直し方: (空) を = 0 にします。
広告
広告スロット(未設定)
パターン2
1 const [x, y, z ] = [10, 20]; ^ 2 console.log(z);
出力: undefined期待: -1 (エラーにはなりません)
zに対応する3番目の要素は元の配列に存在しません。デフォルト値を付けなければundefinedのままです。
直し方: (空) を = -1 にします。
パターン3
1 const [a, b, c ] = ["x", "y"]; ^ 2 console.log(c);
出力: undefined期待: none (エラーにはなりません)
cに対応する要素が元の配列にないため、デフォルト値を指定しない限りundefinedになります。
直し方: (空) を = "none" にします。
よくある誤解
「変数の数だけ自動で埋めてくれるはず」という思い込みは誤りです。元の配列に対応する要素が無ければ、デフォルト値を指定しない限りundefinedがそのまま入ります。
まとめ
配列の分割代入で要素が足りないとundefinedになる(デフォルト値の付け方)は中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。