タイトルがおかしくなるかもしれませんが、私は JavaScript の初心者なので、この状況をどのように説明したらよいかわかりません。
コードは次のとおりです。
a={};
var b=a;
b['a']='x';
console.log(a);
結果は次のようになります。
Object { a="x"}
「x」を変数 b のみに設定したため、空のオブジェクトである必要はありませんか?
タイトルがおかしくなるかもしれませんが、私は JavaScript の初心者なので、この状況をどのように説明したらよいかわかりません。
コードは次のとおりです。
a={};
var b=a;
b['a']='x';
console.log(a);
結果は次のようになります。
Object { a="x"}
「x」を変数 b のみに設定したため、空のオブジェクトである必要はありませんか?
a次のように、オブジェクトへの参照が含まれています。
+-----+ +--------------+ | | |------>| (オブジェクト) | +-----+ +--------------+
だからあなたがするとき:
var b = a;
これで、同じオブジェクトを参照する 2 つの変数ができました。
+-----+
| | |---+
+-----+ | +-------------+
+--->| (オブジェクト) |
+-----+ | +-------------+
| | b |---+
+-----+
したがって、当然のことながら、そのオブジェクトに加えた変更 (あなたの場合はそれにプロパティを追加すること) は、どちらの参照からも見ることができます。
bへの参照でaあるため、これは正常な動作です。それを避けるには、クローンを作成する必要があります。たとえば、jQuery フレームワークを使用すると、次のように簡単に実行できます。var b = $.extend(true, {}, a};