JavaScript豆知識3 変数の参照について
プロパティつきのオブジェクト[obj]を宣言して、そのプロパティをletで[hensu]として宣言します。そしてhensuに値を代入してログを出してみると…hensu1に値を代入したのにobjの値が変わっていない!ナンデ!?!?
const obj = {
prop1:'a'
, prop2: 'b'
, prop3: 'c'
};
let hensu1 = obj.prop1;
hensu1 = 'x';
console.log(hensu1); // x
console.log(obj.prop1); // a
ということで調べてみたら、詳しいことは忘れましたが、「javascriptで宣言した変数は、参照先が[プロパティを持ったオブジェクト]である場合以外は、値だけを格納する」というような動きをしているらしいです。
オブジェクトと言うとややこしいし本当に何でもありになってしまうので、ここでは「プロパティを持ったオブジェクト」のことを「コンテナ」と呼んでみます。
変数の参照先のオブジェクトが文字列や数値なら変数が表すものは文字列や数値そのもので、参照先のオブジェクトがコンテナなら、変数はそのコンテナを示します。「コンテナのコピー」ではなく、「オリジナルのコンテナ」です。なので、上下のノード…コンテナの親オブジェクトや、コンテナのプロパティを辿ることができるわけです。
コンテナとかノードとかプロパティとか親子とか色々な表現がありますが、「つまりすべからく入れ子構造!!マトリョシカなのだ!!!」とざっくり完全に理解したつもりになると楽になれるかもしれません。