Eikicの勉強ログ

勉強したことをつらつら書いていきます

【javascript】jsの配列でつまずいた...

今回はjavascript(本当はGAS)で開発を行っていた際につまずいたポイントがあったので残しておきます.

経緯

GoogleSpreadSheetにgasを使ってコードを書いていた.
行Aの内容を少し変更して行Bに挿入するコードを書いた.
実行してみるとなんと!
レコードBの内容がレコードAにも反映されていた!!

原因

コード例は下に載せますが,jsでは配列がオブジェクトとして扱われることを知らず「代入」を用いてレコードのコピーと編集,挿入を行っていた.
ここで重要なのは,普通の値を変数に代入するときは「値渡し」
つまり通常よくやる代入方法で変数ごとにアドレスを確保するもの
今回のようにオブジェクトを変数に代入するときは「参照渡し」
つまり代入される変数は代入するものとアドレスを共有する方法
jsの配列はオブジェクトとして扱われ,代入は「参照渡し」になるため今回はつまずいてしまった.

var recordA = ["あいうえお","かきくけこ","さしすせそ"];
var recordB = recordA;
recordB[1] = "がぎぐげご";

console.log(recordA);
//出力結果
//["あいうえお","かきくけこ","さしすせそ"]
//の内容であってほしかったが実際には
//["あいうえお","がぎぐげご","さしすせそ"]
console.log(recordB);
//出力結果
//["あいうえお","がぎぐげご","さしすせそ"]

結論

jsで配列はオブジェクト / オブジェクトの代入は参照渡しになる

参考になった方はいいね!コメントよろしくお願いします.
モチベーションにつながります笑