vue對(duì)象復(fù)制方式(深拷貝,多層對(duì)象拷貝方式在后面)
vue對(duì)象復(fù)制
使用:es6中的“對(duì)象擴(kuò)展運(yùn)算符 ”,如下
// 對(duì)象深拷貝 obejctCopy() { // 源對(duì)象小李 const source = { name: '小李', age: 18, gender: '男', school: '清華大學(xué)' } // 拷貝小李 const copy1 = { ...source } // 拷貝小李,并修改名字為小張 const copy2 = { ...source, name: '小張' } // 修改源對(duì)象 source.age = 19 // 查看結(jié)果 console.log(source) console.log(copy1) console.log(copy2) }
結(jié)果:可見(jiàn)拷貝出來(lái)的對(duì)象,與源對(duì)象無(wú)關(guān),深拷貝完成
更新
經(jīng)網(wǎng)友指出,當(dāng)對(duì)象中還包含對(duì)象時(shí),則里層對(duì)象還是淺拷貝,驗(yàn)證代碼
// 源對(duì)象小李 // const source = { name: '小李', age: 18, gender: '男', school: '清華大學(xué)' } const source = { name: '小李', age: 18, gender: '男', school: '清華大學(xué)', more: { a: "test", b: 2, c: {} } } // 拷貝小李 const copy1 = { ...source } console.log(source === copy1) // false console.log(source.more === copy1.more) // true
若要里層拷貝則需要再次使用...,如下
// 源對(duì)象小李 // const source = { name: '小李', age: 18, gender: '男', school: '清華大學(xué)' } const source = { name: '小李', age: 18, gender: '男', school: '清華大學(xué)', more: { a: "test", b: 2, c: {} } } // 拷貝小李 const copy1 = { ...source, more: { ...source.more } } console.log(source === copy1) // false console.log(source.more === copy1.more) // false
我的理解
==比較對(duì)象的時(shí)候還是比較的引用地址是不是同一個(gè)。在多層拷貝中,雖然“對(duì)more的引用”這個(gè)操作被復(fù)制了,但是引用指向的“more對(duì)象地址”還是同一個(gè),內(nèi)存中實(shí)際上只有一個(gè)“more”。因此要再次復(fù)制more才可以
vue對(duì)象復(fù)制的坑--對(duì)象深度拷貝
錯(cuò)誤描述
使用vue store 存儲(chǔ)的復(fù)雜對(duì)象,在其它文件中將其賦值給其他變量后,被賦值對(duì)象修改后,store中存儲(chǔ)的對(duì)象也被修改了。。。
解決辦法
如:depttreedata 為存儲(chǔ)在store->getters中的非簡(jiǎn)單對(duì)象,將其拷貝給dept02data 對(duì)象可以寫(xiě)作:
let dept02data = JSON.parse(JSON.stringify(this.$store.getters.depttreedata));
之后引用dept02data 則不會(huì)影響原對(duì)象。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用vue項(xiàng)目配置多個(gè)代理的注意點(diǎn)
這篇文章主要介紹了使用vue項(xiàng)目配置多個(gè)代理的注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07vue+elementui實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示和隱藏
這篇文章主要介紹了vue+elementui實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示和隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04詳解如何將 Vue-cli 改造成支持多頁(yè)面的 history 模式
本篇文章主要介紹了詳解如何將 Vue-cli 改造成支持多頁(yè)面的 history 模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11vue.js項(xiàng)目 el-input 組件 監(jiān)聽(tīng)回車(chē)鍵實(shí)現(xiàn)搜索功能示例
今天小編就為大家分享一篇vue.js項(xiàng)目 el-input 組件 監(jiān)聽(tīng)回車(chē)鍵實(shí)現(xiàn)搜索功能示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08vue中vite.config.js配置跨域以及環(huán)境配置方式
這篇文章主要介紹了vue中vite.config.js配置跨域以及環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Vue中虛擬DOM的簡(jiǎn)單實(shí)現(xiàn)
Vue中的虛擬DOM是通過(guò)JavaScript對(duì)象來(lái)描述真實(shí)DOM結(jié)構(gòu)的一種方式,本文將介紹Vue中虛擬DOM的簡(jiǎn)單實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-05-05Ant?Design?Vue?走馬燈實(shí)現(xiàn)單頁(yè)多張圖片輪播效果
這篇文章主要介紹了Ant?Design?Vue?走馬燈實(shí)現(xiàn)單頁(yè)多張圖片輪播,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07