js對象深拷貝方法


JSON.stringify()是目前前端開發過程中最常用的深拷貝方式,

原理是把有個對象序列化成為一個 JSON 字符串,將對象的內容轉換成字符串的形式再保存到磁盤上,

再用 JSON.parse()反序列化將 JSON 字符串變成一個新的對象

 1 let obj1 = {  2   a: 1,  3   b: [1, 2, 3],  4 };  5 
 6 let str = JSON.stringify(obj1);  7 let obj2 = JSON.parse(str);  8 console.log(obj2); //{ a: 1, b: [ 1, 2, 3 ] }
 9 
10 //修改obj1
11 obj1.a = 2; 12 obj1.b.push(4); 13 console.log(obj1); //{ a: 2, b: [ 1, 2, 3, 4 ] }
14 console.log(obj2); //{ a: 1, b: [ 1, 2, 3 ] }

通過 JSON.stringify 實現深拷貝有幾點要注意

  1. 拷貝的對象的值中如果有函數,undefined,symbol 則經過 JSON.stringify()序列化后的 JSON 字符串中這個鍵值對會消失
  2. 無法拷貝不可枚舉的屬性,無法拷貝對象的原型鏈
  3. 拷貝 Date 引用類型會變成字符串
  4. 拷貝 RegExp 引用類型會變成空對象
  5. 對象中含有 NaN、Infinity 和-Infinity,則序列化的結果會變成 null
  6. 無法拷貝對象的循環應用(即 obj[key] = obj)

 

 

 

 

 

 

 

學習記錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM