2017-12-10 3 views
0

は、以下のコードを検討:Javascriptでオブジェクト値を持つサブプロパティが参照によってコピーされていますか?

A={ 
    prop1: 12, 
    prop2: {x:12} 
}; 
newprop2={k:55,l:3}; 
A.prop2=newprop2; 
newprop2 = {m:65, n:25}; 
console.log(A); 

出力される。

{ prop1: 12, prop2: { k: 55, l: 3 } } 

Iを出力することが期待:オブジェクトが参照によってコピーされるので

{ prop1: 12, prop2: {m:65, n:25} } 

、私はサブを期待していました値として割り当てたいオブジェクトはLARGEであり、複数のコピーを保持したくないので、-propertiesは参照によってコピーされました。

答えて

5

はい、オブジェクトは参照によってコピーされます。しかし、newprop2 = {m:65, n:25};の行では、newprop2に新しいオブジェクトを割り当てています。古い参照はまだA.prop2に割り当てられており、newprop2が参照していた古いオブジェクトを参照しています。したがって、newprop2は、今まで参照していたオブジェクトとは何もしていない別のオブジェクトを参照するようになりました。

簡潔に言えば、newprop2の参照を変更しました。 newprop2でプロパティにアクセスし、参照を変更しない場合は、A.prop2が参照する同じオブジェクトを変更します。

const A = { 
 
    prop1: 12, 
 
    prop2: { x: 12 } 
 
}; 
 

 
let newprop2 = { k:55, l:3 }; 
 
A.prop2 = newprop2; 
 

 
newprop2.k = 65; 
 
newprop2.l = 25; 
 

 
console.log(A);

0

はい、それはnewprop2={k:55,l:3};によって参照されたため。後でnewprop2の参照を変更しましたが、割り当てが完了した後であったため、prop2 of Aにはより古い参照がnewprop2となっています。最後にA.prop2 !== newprop2newprop2に新しい値を割り当てたら、値をprop2に設定する必要があります。新しい割り当てprop2の後にprop2の値を割り当ててください。

A={ 
 
    prop1: 12, 
 
    prop2: {x:12} 
 
}; 
 
newprop2={k:55,l:3}; 
 
newprop2 = {m:65, n:25}; 
 
    A.prop2=newprop2; 
 
console.log(A);

A.prop2 === newprop2

関連する問題