国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

談談深拷貝與淺拷貝

Awbeci / 2262人閱讀

摘要:前言關于深拷貝和淺拷貝其實是兩個比較基礎的概念,但是我還是想整理一下,因為里面有很多小細節(jié)還是很有意思的。那深拷貝就是兩者指向不同的內存地址,是真正意義上的拷貝。談談是我們經常用到的方法,其實這個方法就是淺拷貝。

前言

關于深拷貝和淺拷貝其實是兩個比較基礎的概念,但是我還是想整理一下,因為里面有很多小細節(jié)還是很有意思的。

深拷貝和淺拷貝的區(qū)別

深拷貝和淺拷貝是大家經常聽到的兩個名詞,兩者到底有什么不同呢?

先看看什么是淺拷貝。

var obj1 = { a: 1, b: 2 };
var obj2 = obj1;
obj2.a = 3;

console.log(obj1); // { a: 3, b: 2 }
console.log(obj2); // { a: 3, b: 2 }

這是一個最簡單的淺拷貝的例子,我把obj1賦值給obj2,改變了obj2中的一個屬性值,obj1中的相應屬性值也跟著變化了,這是為什么呢?

因為淺拷貝其實只是引用的拷貝,兩者還是指向內存中的同一個地址。簡而言之,就是obj1和obj2其實指向的是同一個對象。打個比方,就像一個房間把門牌號1換成了門牌號2,但是這個房間還是這個房間。

深拷貝就是兩者指向不同的內存地址,是真正意義上的拷貝。拿上面的房間舉例子,就是你真的重新開了一間房,并不是只是換門牌號。

談談Object.assign()

Object.assign()是我們經常用到的方法,其實這個方法就是淺拷貝。但是它又有一點特殊的地方,就是可以處理第一層的深拷貝。

var obj1 = { a: 1, b: { c: 2 } };
var obj2 = Object.assign({}, obj1);
obj2.a = 3;
obj2.b.c = 3;
console.log(obj1); // { a: 1, b: { c: 3 } }
console.log(obj2); // { a: 3, b: { c: 3 } }

看上面的例子,屬性a的值并沒有跟著變,但是屬性b中的c的值跟著變了。

常用的實現(xiàn)深拷貝的方式 JSON

這是最常用的實現(xiàn)深拷貝的方式,直接看例子:

var obj1 = { a: { b: 1 } };
var obj2 = JSON.parse(JSON.stringify(obj1));

這種方法很簡單而且好用,但是有一點點瑕疵,它會拋棄對象的constructor。也就是深拷貝之后,不管這個對象原來的構造函數(shù)是什么,在深拷貝之后都會變成Object。

而且這種方法能正確處理的對象只有 Number, String, Boolean, Array,即那些能夠被JSON直接表示的數(shù)據(jù)結構。RegExp對象或者function是無法通過這種方式深拷貝。

lodash

這是我個人目前使用的方法,只需要一行var obj2 = _.cloneDeep(obj1)就能實現(xiàn)。而且lodash是一個功能很強大的庫,提供的方法可靠又簡單,真的是懶人必備,點擊這里去了解它吧!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98510.html

相關文章

  • 面試篇---1 如何區(qū)分拷貝與淺拷貝

    摘要:引用數(shù)據(jù)類型名存在棧內存中,值存在于堆內存中,但是棧內存會提供一個引用的地址指向堆內存中的值,我們以上面淺拷貝的例子畫個圖當進行拷貝時,其實復制的是的引用地址,而并非堆里面的值。 如何區(qū)分深拷貝與淺拷貝? 簡單來說,就是假設B復制了A,當修改A時,看B是否會發(fā)生變化,如果B也跟著變了,說明這是淺拷貝,拿人手短,如果B沒變,那就是深拷貝,自食其力。 淺拷貝例子: var a=[0,1...

    jsdt 評論0 收藏0
  • JS中的拷貝與淺拷貝

    摘要:中的深拷貝與淺拷貝說到深淺拷貝的時候就不得不說一下中的變量類型了基本類型按值存放在棧內存中的簡單數(shù)據(jù)段可以直接訪問引用類型存放在堆內存中的對象變量保存的是一個指向存放數(shù)據(jù)位置的指針訪問引用類型的值時首先從棧中獲取到存放該數(shù)據(jù)位置的指針然后再 JS中的深拷貝與淺拷貝 說到深淺拷貝的時候就不得不說一下JS中的變量類型了: 基本類型: undefined、null、boolean、numb...

    ARGUS 評論0 收藏0
  • JS每日一題:拷貝與淺拷貝的區(qū)別?如何實現(xiàn)一個拷貝

    摘要:期深拷貝與淺拷貝的區(qū)別如何實現(xiàn)一個深拷貝在回答這個問題前,我們先來回顧一下中兩大數(shù)據(jù)類型基本類型引用類型基本類型基本類型就是值類型存放在棧內存中的簡單數(shù)據(jù)段,數(shù)據(jù)大小確定,內存空間大小可以分配引用類型引用類型存放在堆內存中的對象,變量實際保 20190311期 深拷貝與淺拷貝的區(qū)別?如何實現(xiàn)一個深拷貝 在回答這個問題前,我們先來回顧一下JS中兩大數(shù)據(jù)類型 基本類型 Undefined...

    MiracleWong 評論0 收藏0
  • JS 中的拷貝與淺拷貝

    摘要:什么是深拷貝淺拷貝見名知義,無論是深拷貝還是淺拷貝,都是的問題。使用如下以上就是關于中的深拷貝與淺拷貝的知識和如何進行深拷貝的知識了,如果有錯或者有其他方式的話,歡迎在下面留言評論啦 前言 最近在寫項目的時候涉及到一些父子組件傳遞個對象或者數(shù)組通信啥的,或者是直接復制添加對象啥的,直接使用賦值的時候總會出錯。一查原來是淺拷貝的問題,就從網(wǎng)上找了點資料,匯總到這里來了。 1 什么是深拷貝...

    ztyzz 評論0 收藏0
  • python 拷貝與淺拷貝

    摘要:深拷貝和淺拷貝原始對象賦值,傳對象的引用對象拷貝,淺拷貝對象拷貝,深拷貝修改對象修改對象中的數(shù)組對象 深拷貝和淺拷貝 import copy a = [1, 2, 3, 4, [a, b]] #原始對象 b = a #賦值,傳對象的引用 c = copy.copy(a) #對象拷貝,淺拷貝 d = copy.deepcopy(a) #對象拷貝,深拷貝 a...

    JeOam 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<