【Javascript】配列に変更を加えると、なにが起きるか
delete演算子
・配列の要素の削除を行う
・実行の結果、配列は疎になる
→削除した要素は消えるのではなく、「定義されていない」状態になる
・lengthプロパティは変化しない
→要素数は変化しない
splice()メソッド
・要素の挿入と削除を別々に、或いは同時に実行することができる
・挿入や削除が行われた後、配列の要素はそのほかの要素と連続するように移動され、必要に応じてインデックスは増加/現象する
concat()メソッド
・呼び出した配列の要素の後に、引数で指定した要素を追加した配列を新たに生成し、返す
・この時、呼び出した配列の新しいコピーを作成している!
→元の配列を直接操作しないので、元の配列は変更されない!!
・引数に配列を指定すると、その配列は展開される
※入れ子になった配列は展開されない
push()メソッド
・配列の最後に1個または複数の要素を追加し、追加した後の配列の長さを返す
・引数に配列を指定しても、配列を展開しない
map()メソッド
・呼び出された配列は変更しない
・配列が疎の場合、存在しない要素に対しては関数は呼び出されないが、
map()メソッドから返される配列も元の配列と同じように疎になる
→元の配列と同じ長さになり、同じインデックスの要素が存在しない状態になる
所感
・基本型ならコピー、オブジェクト型なら参照をとると思っていたが、
オブジェクト型でもメソッドによってコピーを作成する場合、
参照を代入する場合があるのだと分かった
参考: