var obj = {foo:"moge"};
var dat = obj;
obj.foo = "bar";
obj = "";
alert(dat.foo); // <- undefined とかを期待したのに、bar って出る。
alert(obj.foo); // <- こっちはundefined と出る。おいおい。
というわけで、こうしなきゃだめ。
var obj = {foo:"moge"};
var dat = obj;
obj.foo = "bar";
obj.foo = undefined;
alert(dat.foo); // <- undefined
alert(obj.foo); // <- undefined
なんか、当たり前のコードになった。
なんか、これ、腑に落ちないよねー。
それが出来るんなら、なんで最初のは undefined にならねーんだっつー話ですよ。
まぁいいか。つか、おかげでなんか今まで書いたコードでメモリ食う理由がわかった気もする。
あと、調べてわかったことは、 var obj ってしたら、 delete(obj) って出来ないということ。
グローバル変数じゃないと、delete 演算子は仕事をしないっつーことのようです。
基本らしいのだけど、基本を知りません。ワタクシ。Oh! No.
http://nanto.asablo.jp/blog/2008/01/09/2552470#jsdel-target
ここを読むと良くわかりました。
【削除されない見本】
var obj = {foo:"moge"};
var dat = obj;
obj.foo = "bar";
delete(obj); // <- 削除されない
alert(dat.foo); // <- bar
alert(obj.foo); // <- bar
かーらーの、
【削除される見本】
obj = {foo:"moge"};
var dat = obj;
obj.foo = "bar";
delete(obj); // <- 削除される
alert(dat.foo); // <- こっちは bar が出る。
alert(obj.foo); // <-エラーになって alert が出ない。
Javascript の オブジェクトとかは参照渡し!とはいえ、
参照元のオブジェクト自体を削除しても、参照先のプロパティも削除されるわけではなく、
どっちかというと、ギリギリ前に参照していた内容がコピーされる、ということかなぁ?