JavaScript豆知識3 変数の参照について



javascriptでオブジェクトのプロパティを変数として宣言した時の挙動でつまづいたことがあったので、メモを残します。
プロパティつきのオブジェクト[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で宣言した変数は、参照先が[プロパティを持ったオブジェクト]である場合以外は、値だけを格納する」というような動きをしているらしいです。

オブジェクトと言うとややこしいし本当に何でもありになってしまうので、ここでは「プロパティを持ったオブジェクト」のことを「コンテナ」と呼んでみます。

変数の参照先のオブジェクトが文字列や数値なら変数が表すものは文字列や数値そのもので、参照先のオブジェクトがコンテナなら、変数はそのコンテナを示します。「コンテナのコピー」ではなく、「オリジナルのコンテナ」です。なので、上下のノード…コンテナの親オブジェクトや、コンテナのプロパティを辿ることができるわけです。

コンテナとかノードとかプロパティとか親子とか色々な表現がありますが、「つまりすべからく入れ子構造!!マトリョシカなのだ!!!」とざっくり完全に理解したつもりになると楽になれるかもしれません。

このブログの人気の投稿

技術メモ「503 Service Unavailable」

グーグルグループのメーリングリストの返信先が個人になってしまう

『ネットワークドライブ』のトラブル