~文法メモ~ 配列の分割代入概要分割代入することで、「配列」や「オブジェクト」を分解し、 配列の要素の分割代入let [var1, var2] = [10, 20]; hm.debuginfo(var1); // 10 hm.debuginfo(var2); // 20 配列の要素の分割代入と「...」演算子「...」演算子を利用することで、「残りの要素を配列にして」、 let [var1, var2, ...other] = [10, 20, 30, 40, 50] hm.debuginfo(var1); // 10 hm.debuginfo(var2); // 20 hm.debuginfo(other); // 30,40,50。others は [30,40,50] という配列 オブジェクトのプロパティの分割代入let {foo, bar} = {foo:"こちら", bar:"あちら"}; hm.debuginfo(foo); // こちら hm.debuginfo(bar); // あちら オブジェクトのプロパティの分割代入(変数名を変更)受け取る変数名を変更する場合には、以下のようにします let {foo:x, bar:y} = {foo:"こちら", bar:"あちら"} hm.debuginfo(x); // こちら hm.debuginfo(y); // あちら オブジェクトのプロパティの分割代入(デフォルト値)オブジェクトのプロパティに対応するものが無かった場合に備え、デフォルト値を設定しておくことが出来ます。 let {foo="どちら", bar} = {bar:"あちら"} hm.debuginfo(foo); // どちら hm.debuginfo(bar); // あちら 宣言時以外の分割代入配列については宣言時と同様に代入できます。 let var1, var2; [var1, var2, ...other] = [10, 20, 30, 40, 50] hm.debuginfo(var1); // 10 hm.debuginfo(var2); // 20 hm.debuginfo(other); // 30,40,50。others は [30,40,50] という配列 しかし、オブジェクトのプロパティは要注意です。 let foo, bar; {foo, bar} = {foo:"こちら", bar:"あちら"} // エラーとなってしまう。 これは、初期化時以外は{...}が複数ステートメントを囲い込むブロックとみなされてしまうためです。 以下のようにするのが正しくなります。 let foo, bar; ({foo, bar} = {foo:"こちら", bar:"あちら"}) // このように( )で全体を囲い込む必要がある。 hm.debuginfo(foo); // こちら hm.debuginfo(bar); // あちら 変数の値を入れ替えるlet [var1, var2] = [10, 20]; [var1, var2] = [var2, var1]; hm.debuginfo(var1); // 20 hm.debuginfo(var2); // 10 関数から複数の値を返すfunction multi_return_func() { return [10, 20]; } let [var1, var2] = multi_return_func(); hm.debuginfo(var1); // 10 hm.debuginfo(var2); // 20 |