js克隆一個對象


我們知道,對象類型在賦值的過程中其實是復制了地址,所以如果改變了一方,其他都會被改變。我們應該如何克隆一個對象,並且避免這種現象的發生呢?

方法一:Object.assign

function copy(obj){
    return Object.assign({}, obj);
}

方法二:…展開運算符

function copy(obj){
    return { …obj };
}
方法一,方法二是淺拷貝,也就是當對象層級大於2層時,復制到的還是地址信息
let a = {age:1,
         jobs: {first:'FE’} 
        }
let b = copy(a) 
a.jobs.first =‘native'
console.log(b.jobs.first)// native

方法三:JSON

function copy(obj){
    return JSON.parse(JSON.stringify( obj ));
}
  • 會忽略undefined,fn
  • 不能序列化函數
  • 不能解決循環引用的對象

方法四:MessageChannel

function structuralClone(){
    return new Promise(resolve =>{
        const {port1,port2} = new MessageChannel()
        port2.onmessage = ev => resolve(ev.data)
        port1.postMessage(obj)
    })
}
obj2  = await structuralClone(obj1);
  • 如果對象中有函數,會報錯
  • 可以解決循環引用的對象
  • 異步 await


免責聲明!

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



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