淺談物件的深複製和淺複製的區別。
場景
當你的元件裡需要用到同一個資料,但身負不同的責任。
舉個例子:vue的雙向繫結
你在與後端的互動中請求回來的資料,res, let a = res; let b = res;
因為是會用到checkbox,在外層的列表裡選中資料,以及在Modal裡面會新增資料,提交表單會分別以兩個陣列的方式提交,這樣做的bug是忽略了a陣列與b陣列都是淺複製了res,導致在外面的資料選中之後新增的資料也會選中,可這並不是想要的(出現的原因:同一個物件賦值給兩個變數,這兩個變數的指標都是源物件的記憶體地址,a的資料選中之後其實是源物件res的資料發生了變化,所以a和b都會發生變化
淺複製的坑。。。。。。。。
深複製程式碼貼一個:
let b = JSON.parse(JSON.stringify(res));
當然還有其他程式碼,我僅淺談區別。
相關推薦
物件深拷貝和淺拷貝
寫在前面 各類技術論壇關於深拷貝的部落格有很多,有些寫的也比我好,那為什麼我還要堅持寫這篇部落格呢,之前看到的一篇部落格中有句話寫的非常好 學習就好比是座大山,人們沿著不同的路登山,分享著自己看到的風景。你不一定能看到別人看到的風景,體會到別人的心情。只有自己去登山,才能看到不一樣的風景,體會才更加
淺談Mysql中where和having的區別
where和having的區別一、誤區:不要錯誤的認為having和group by 必須配合使用.二、where和having用法解析:1、 where和having都可以使用的場景: select goods_price,goods_name from goods where goods_price &g
Java深拷貝和淺拷貝(深克隆和淺克隆)
Java中建立物件有兩種方式: 通過new操作符建立一個物件 通過clone方法來複制一個物件 使用反序列化來建立一個物件 通過使用Class類的newInstance方法來建立一個物件 使用Constructor類的newInstance方法來建立一個物件 第一種方法,通過ne
淺談ES的let和const及其區別
淺談ES的let和const ES6提供了let和const的新特性,同時也是新的變數宣告方式,它能解決以往var變數宣告存在的隱性弊端問題。 Let let的出現,解決了ES中塊級作用域的需求。回顧在這之前,Js並沒有沒什麼類似其他程式語言中塊級作用域的概念(
淺談MVC,MVP 和 MVVM 的區別
複雜的軟體必須有清晰合理的架構,否則無法開發和維護。 以下以Javascript客戶端頁面開發為例使用圖示簡單闡述三者的聯絡和區別。 需要注意的是,MVC開發模式備廣泛用於各種軟體開發中,包括網際網路的B/S模式的產品,而其他兩種模式大多數用在客戶端開發中,例如:Javascrtipt、WPF、Adn
淺探JavaScript深拷貝和淺拷貝
摘要: 不知深淺很危險吶。物件和陣列的拷貝對我來說一直都是一個比較模糊的概念,一直有點一知半解,但是在實際工作中又偶爾會涉及到,有時候還會一不小心掉坑裡,不知道大家有沒有同樣的感受,因此,準備對js物件和陣列拷貝一探究竟。提到js的物件和陣列拷貝,大家一定會想深拷貝和淺拷貝,但是為什麼會有深拷貝和淺拷貝呢?下
淺談Android中Serializable和Parcelable使用區別
Android中序列化有兩種方式:Serializable以及Parcelable。其中Serializable是Java自帶的,而Parcelable是安卓專有的。 一、Serializable序列化 serializable使用比較簡單,只需要對某個類實現Serializable 介面即可。 Ser
淺談javaSE中set和list的區別
一、關於集合類 set和list首先是java中的集合類,那麼可以簡單介紹下集合類。 現在有個簡單問題。 把一個公司每個員工作為一個物件,那麼這個公司就有了很多這樣的員工物件,該如何儲存這些物件? 如果使用原始的陣列方式,且不說員工物件的個數不確定,即使現在確定下來,每天都
淺談C++中指標和引用的區別
指標和引用在C++中很常用,但是對於它們之間的區別很多初學者都不是太熟悉,下面來談談他們2者之間的區別和用法。1.指標和引用的定義和性質區別:(1)指標:指標是一個變數,只不過這個變數儲存的是一個地址,指向記憶體的一個儲存單元;而引用跟原來的變數實質上是同一個東西,只不過是原變數的一個別名而已。如:int a
淺談.NET中介面和類的區別
.Net提供了介面,這個不同於Class或者Struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.Net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。 接下來先說說
淺談java中replace()和replaceAll()的區別
replace和replaceAll是JAVA中常用的替換字元的方法,它們的區別是: 1)replace的引數是char和CharSequence,即可以支援字元的替換,也支援字串的替換(CharSequence即字串序列的意思,說白了也就是字串); 2)replaceA
淺談物件的深複製和淺複製的區別。
場景 當你的元件裡需要用到同一個資料,但身負不同的責任。 舉個例子:vue的雙向繫結 你在與後端的互動中請求回來的資料,res, let a = res; let b = res; 因為是會用到checkbox,在外層的列表裡選中資
Java物件的深複製和淺複製
原文連結 我們在編碼過程經常會碰到將一個物件傳遞給另一個物件,java中對於基本型變數採用的是值傳遞,而對於物件比如bean傳遞時採用的引用傳遞也就是地址傳遞,而很多時候對於物件傳遞我們也希望能夠象值傳遞一樣,使得傳遞之前和之後有不同的記憶體地址,在這種情況下
初探python物件複製問題的深拷貝和淺拷貝
前階段學習python時遇到物件拷貝的問題,感覺有個不小的坑,於是乎搜了一下網上相關部落格的介紹,然而總覺得敘述太長,不夠簡潔。本文通過總結前人經驗,並根據自己的理解,簡單談一談python中的拷貝小坑。 python中實現物件複製的方法大致有3種:簡單粗暴直
C 深複製和淺複製
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
python的複製,深拷貝和淺拷貝的區別
在python中,物件賦值實際上是物件的引用。當建立一個物件,然後把它賦給另一個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法, alist=[1,2,3,[“a”,“b”]] (1)直接賦值,傳遞物件的引用而已,原始列表
陣列複製與深拷貝和淺拷貝
深淺拷貝針對如物件、陣列之類的複雜型別。 就陣列而言。 深拷貝 拷貝的陣列變數和原來的陣列變數是指向兩塊不同的空間,二者的操作互相不影響。 int[] a = new int[]{1,2
值型別和引用型別,深層複製和淺層複製(深拷貝淺拷貝)最詳細了
要知道深層複製淺層複製的區別,首先要了解值型別和引用型別。變數分值型別和引用型別,深層複製和淺層複製都是針對引用型別變數的操作。值型別: 比如數值,字串,布林,undifined引用型別 : 比如陣列,物件,函式來張圖(手抖,有點醜):var num = 77;var id
javascript的深複製和淺複製(深度拷貝和淺拷貝)
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>js深度複製淺顯複製</title> </head>
ES6(JavaScript)的深複製和淺複製
React中,我們會遇到一個有趣的問題,那就是物件的複製,為什麼說有趣,是因為直覺和結果差距很大。 我們看一下這個例子: let a={tile:'深複製'}; let b=a; a.title='淺複製'; 那麼我們會獲得兩個物件,一個a,一個b,a的title是淺複製,