Javascript

変数の挙動を理解する

単純なデータ型と配列やオブジェクトで、変数を代入したときの挙動が異なる理由について説明していきます。

  • 変数代入時の挙動の違い
  • スプレット演算子

変数代入時の挙動の違い

・単純なデータ型の場合、 x = 1 とするとコンピュータ上で1という値が格納されて、そこに x という名前が付来ます。y = x とすると x の値である 1 がどこか別のところにコピーされて、そこに y という名前が付きます。

・そのあとに x = 2とすると x の値が 2になるので、結果として x が2 、 y には x が 1 のときの値そのものがコピーされているので y は 1 になります。

・複雑なデータ型である配列は、 x = [1, 2] とすると[1, 2] という値が格納されて、そこに x という名前が付き、y = x とすると、 x に割り当てられた値ではなくて、 x の値がどこに格納されているかという情報だけが作られて、そこに y という名前が付くという仕組みになっています。

・ x[0] = 3とすると、今度は x が [3, 2] になって、 y については x の値の場所を指し示しているだけなので、 y も [3, 2] になる

・なぜこのようになるかは、複雑なデータ型はデータ量が大きくなることも多いので、丸ごと値をコピーしてシステムに負荷をかけてしまわないためです。

スプレット演算子

・しかし配列やオブジェクトをまるコピーしたい場合もあります。その場合はスプレット演算子を使います。

let y = […x];としてあげると x の値が展開されて、 y には x の値がある場所ではなくて、[1, 2] という値そのものが代入されます。

-Javascript