1. 程式人生 > 實用技巧 >js的深拷貝

js的深拷貝

1. 直接使用JSON.parse(JSON.stringify(Object))來進行
缺點: 如果物件或者數組裡有函式什麼的, 就會出問題啦(也有解決辦法)


2. 使用ES的擴充套件運算子...
let newObj = { ...data }
相當於 let newObj = Object.assign({}, data)
拷貝的屬性是有限制的,基礎資料型別會拷貝一份新的,引用資料型別拷貝的是其地址。


3. 使用函式
// 定義一個深拷貝函式 接收目標target引數

function deepClone(target) {
    // 定義一個變數
    let result;
    // 如果當前需要深拷貝的是一個物件的話
if (typeof target === 'object') { // 如果是一個數組的話 if (Array.isArray(target)) { result = []; // 將result賦值為一個數組,並且執行遍歷 for (let i in target) { // 遞迴克隆陣列中的每一項 result.push(deepClone(target[i])) } // 判斷如果當前的值是null的話;直接賦值為null
} else if(target===null) { result = null; // 判斷如果當前的值是一個RegExp物件的話,直接賦值 } else if(target.constructor===RegExp){ result = target; }else { // 否則是普通物件,直接for in迴圈,遞迴賦值物件的所有值 result = {}; for (let i in target) { result[i]
= deepClone(target[i]); } } // 如果不是物件的話,就是基本資料型別,那麼直接賦值 } else { result = target; } // 返回最終結果 return result; }