2016-04-13 11 views
0

これがなぜ起こっているのかを理解しようとしています。奥行きの違う振る舞いをするJavaScriptオブジェクトと配列参照

私は、JavaScript配列、オブジェクト、およびオブジェクトへの参照を少し実験していました。それから私はもう理解していないポイントに達しました。

私はオブジェクトを保持する配列を作成します。そのオブジェクトへの参照をしてプロパティを変更すると、オリジナルとリファレンスの値が自動的に変更されます。明らかにそれは参照でありコピーではないからです。

もう1つのオブジェクトを保持している配列を持つ配列を作成すると、同じことが予想されましたが、何らかの理由で元のオブジェクトはそのまま残ります。

おそらく、私は今は分かりませんが、本当に簡単な説明があります。誰かが私にそれを説明することができますか?

ありがとうございます!

var foo = [ 
 
    { 
 
    "bar": "bar" 
 
    } 
 
]; 
 

 
var ref = foo[0]; 
 
ref.bar = "new bar"; 
 

 
console.info(foo[0].bar);    // output: new bar 
 
console.info(ref.bar);     // output: new bar 
 
console.info(foo[0].bar === ref.bar); // output: true 
 

 
var foo2 = [ 
 
    { 
 
    "bar2": [ 
 
     { "nested": "nested" } 
 
    ] 
 
    } 
 
]; 
 

 
var ref2 = foo2[0].bar2; 
 
ref2.nested = "nested 2"; 
 

 
console.info(foo2[0].bar2[0].nested);     // output: nested 
 
console.info(ref2.nested);        // output: nested 2 
 
console.info(foo2[0].bar2[0].nested === ref2.nested); // output: false

答えて

0

すべてが正常起こっています。何も変わっていません。あなたはよく分かった。 foo2 [0] .bar2をvar ref2に入れるだけです。

var ref2 = foo2[0].bar2; 

あなたはを.bar2 [0] foo2は、ここで配列でご覧ください。あなたは

*ref2.nested = "nested 2";* 

をしたとき、それはREF2に新しいオブジェクトを追加しました。 あなたがしたいことは

*var ref2 = foo2[0].bar2[0];* 

または他の何かが微妙です。 Javascriptは同じ友達です。参照を失うのは私たちだけです。

+0

ありがとうございます!本当にばかげて... haha​​ha – ius