コアJavaScript(参照によるオブジェクトのコピー)


参照によるオブジェクトのコピー


オブジェクトと元のタイプの根本的な違いの1つは、オブジェクトの「参照によって格納およびコピー」です.
オブジェクトの動作は、オブジェクトを変数に格納するのではなく、オブジェクトのメモリアドレスオブジェクトのリファレンス値を格納します.

参照比較


オブジェクトを比較する場合、等価演算子==と一致演算子==の動作は同じです.
オブジェクトは、obj 1>obj 2などの元の値やobj=5などの値と比較して元のタイプに変換されます.

コピー、マージ、およびオブジェクト。assing


コピーが必要な場合は、新しいオブジェクトを作成し、既存のオブジェクト上のProperty間を移動して元のレベルにコピーするだけです.
let user = {
	name: "John",
    age: 30
}

let clone = {};

for (let key in user) {
	clone[key] = user[key]
}
objcet.assingの使用方法
Object.assing(dest, [src1, src2, src3...])
  • dest:ターゲットオブジェクト
  • src1....src N:コピーするオブジェクト
  • オブジェクトsrc 1,...,srcのpropertyをdestにコピーし、dest以外のすべての買収のpropertyを最初の買収コピー
  • としてコピーします.
  • は、最後のdest
  • を返す

    assingメソッドを使用して複数のオブジェクトを1つにマージ

    let user = {name: John"};
    let permissions1 = {canView: true};
    let permissions2 = {canEdit: true};
    Object.assign(user, permissions1, permission2);
    //now user = {name: 'John', canView: true, canEdit: true}
    Object.assignは、重複することなくレプリケーションオブジェクトを簡単にします.
    let user = {
    	name = "John",
      	age = 30
    };
    let clone = Object.assing({}, users);
    すべてのプロファイルが空の配列にコピーされ、変数に割り当てられます.

    ネストされたオブジェクトのコピー


    Propertyが他のオブジェクトの参照値である場合.
    let user = {
    	name: 'john',
      	size: {
        	height: 182,
          	width: 50
        }
    }
    clone.sizes = user.構成をsizeにコピーするだけでオブジェクトをコピーすることはできません
    user.sizeはオブジェクトなので参照値をコピー
    この問題を解決するには、ユーザー[キー]の各値を確認し、繰り返し文を使用する必要があります(値がオブジェクトの場合、オブジェクトの構造をコピーすることもできます).
    深くコピー
    let user = {
    	name: "John",
      	sizes: {
        	height: 182,
          	width: 50
        }
    };
    let clone = Object.assign({}, user);
    alert(user.sizes === clone.sizes);
    user.sizes.width++ // 한객체에서 프로퍼티를 변경
    alert(clone.sizes.width);