JSの配列と対象の各種コピーのまとめを分析します.

1269 ワード


主なコピー概念は主に2種類に分けられています.深いコピーと浅いコピーは、スタックの参照またはコピーに対して、JSのオブジェクトは基本タイプと複合タイプに分けられ、基本タイプはスタックメモリに保存され、複合タイプはヒープメモリに保存されます.ヒープメモリはnewによって作成されたオブジェクトを格納するために使用されます.スタックには基本型の変数とオブジェクトの参照変数が格納されます.(JSのスタック原理については、下記のリンクを確認できます.https://blog.csdn.net/sinat_15951543/article/details/79228675)
配列コピーは(arrはコピーが必要な配列)があります.
  • Aray.form(arr) 
  • [...arr]
  • arr.slice()
  • arr.co ncat()
  • ここで効果を見せてください.
    var arr = [1,2,3,4,5,6,7,8,9,0,[1,2,3,4,5]] 
    arr['hello']='helloworld';
    console.log('arr',arr); 
    //   (11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, Array(5), hello: "helloworld"]
    var arrCp = [...arr]
    console.log('arrCp ',arrCp ); 
    //   (11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, Array(5)]
    
    //           
    arrCp[10][0] = 2 
    console.log('arrCp[10]',arrCp[10]);
    //  (5) [2, 2, 3, 4, 5];
    console.log('arr[10]',arr[10]);
    //  (5) [2, 2, 3, 4, 5];
    
    これらの四つの効果は同じで、いずれも一級属性の深度コピーです.そして配列の他の属性はコピーされません.
     
    対象コピーは(objはコピーが必要な対象)があります.
  • {...obj}
  • Object.assign( {} Obj)
  •  
    配列の対象はすべて共用することができて、深層と再帰的にコピーする用法はそうです.
    JSON.strigfy(JSON.parse()
     
    深度コピーは主に2種類に分けられています.1つは1級の属性だけが深くコピーされていますか?2級のコピーですか?それともスタック内で参照されているアドレス情報ですか?もう一つは、再帰的に各階層のデータをコピーすることである.