亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

suemi / 1255人閱讀

摘要:深拷貝和淺拷貝的區(qū)別背景最近在用框架寫頁面,賦值給中的對象時會出現(xiàn)一個問題,賦值和被賦值對象之中任何一個有變化,另一個也會隨之變化。

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


背景:
最近在用vue框架寫頁面,賦值給Vue.$data中的對象時會出現(xiàn)一個問題,賦值和被賦值對象之中任何一個有變化,另一個也會隨之變化。
例如:

var b = {
    foo: 123
};
var vm = new Vue({
    el: "#demo",
    data: {
        a: b
    }
});

var b.foo = 456;
console.log(a.foo); //輸出456

var a.foo = 789;
console.log(b.foo); //輸出789

遇到問題之后在網(wǎng)上查原因才了解到j(luò)s有深拷貝和淺拷貝的區(qū)別,提到這個,又不得不提js中的兩種變量類型,即值類型(數(shù)值、布爾值、null、undefined)和引用類型(對象、數(shù)組、函數(shù))。值類型保存于棧中,而引用類型保存在堆中。說到這,又得說下值類型和引用類型賦值時的不同,值類型賦值時會在內(nèi)存中開辟一塊新的空間,然后把賦過來的值保存于這塊新開辟的空間中,引用類型賦值時也會開辟一塊新的空間,不同的時新的空間保存的是賦值對象雖在的地址(即淺拷貝,也就是說賦值和被賦值對象引用的是同一個對象,所以改變其中任何一個對象時,另一個會隨之改變)。所以深拷貝和淺拷貝概念只針對于引用類型,對于值類型來說沒有意義。

但在編寫程序時,往往需要被賦值的對象生成一個新的對象,而不是賦值對象的一個引用,這個時候我們就需要使用深拷貝了。下面是javascript|MDN上的一個例子,里面分別描述了淺拷貝和深拷貝及其的實現(xiàn)方法。

function test() {
  "use strict";
  // 淺拷貝
  let obj1 = { a: 0 , b: { c: 0}};
  let obj2 = Object.assign({}, obj1);
  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  
  obj1.a = 1;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  
  obj2.a = 2;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
  
  obj2.b.c = 3;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
  
  // 深拷貝
  obj1 = { a: 0 , b: { c: 0}};
  let obj3 = JSON.parse(JSON.stringify(obj1));
  obj1.a = 4;
  obj1.b.c = 4;
  console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
}

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/89153.html

相關(guān)文章

  • JS里拷貝和淺拷貝釋義

    摘要:本文解釋中深拷貝和淺拷貝的區(qū)別。深拷貝深拷貝指遞歸的復(fù)制對象的屬性給新對象。有些時候一層的深拷貝被認(rèn)為是淺拷貝,比如的值是一個對象,淺拷貝出來的新對象直接引用了原對象的對象,所以也會相互影響的。 本文解釋javascript中深拷貝和淺拷貝的區(qū)別。 淺拷貝/Shallow Copy 淺拷貝指拷貝了引用值。 var original = {prop1 : Prop1, prop2 : p...

    zollero 評論0 收藏0
  • 淺探j(luò)s拷貝和淺拷貝

    摘要:接下來就讓我們更細(xì)致的探究中的深淺拷貝??偨Y(jié)以上對深拷貝和淺拷貝做了簡單的介紹,在深拷貝的實現(xiàn)上也只介紹了最簡單的實現(xiàn)形式,并未考慮復(fù)雜情況以及相應(yīng)優(yōu)化,想要對深拷貝有更深入的了解,需要大家花時間去深入研究,或者可以關(guān)注我后續(xù)文章的動態(tài)。 對象和數(shù)組的拷貝對我來說一直都是一個比較模糊的概念,一直有點一知半解,但是在實際工作中又偶爾會涉及到,有時候還會一不小心掉坑里,不知道大家有沒有同樣...

    habren 評論0 收藏0
  • 探索php和python下對象拷貝和淺拷貝

    摘要:對于而言,情況可能會有點小復(fù)雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細(xì)微區(qū)別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復(fù)制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當(dāng)于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...

    shinezejian 評論0 收藏0
  • 探索php和python下對象拷貝和淺拷貝

    摘要:對于而言,情況可能會有點小復(fù)雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細(xì)微區(qū)別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復(fù)制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當(dāng)于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...

    wizChen 評論0 收藏0
  • 拷貝拷貝區(qū)別

    摘要:淺拷貝與深拷貝一數(shù)據(jù)類型數(shù)據(jù)分為基本數(shù)據(jù)類型,和對象數(shù)據(jù)類型。淺拷貝是按位拷貝對象,它會創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。對于字符串?dāng)?shù)字及布爾值來說不是或者對象,會拷貝這些值到新的數(shù)組里。 淺拷貝與深拷貝 一、數(shù)據(jù)類型數(shù)據(jù)分為基本數(shù)據(jù)類型(String, Number, Boolean, Null, Undefined,Symbol)和對象數(shù)據(jù)類型。 基本數(shù)據(jù)類...

    jsyzchen 評論0 收藏0

發(fā)表評論

0條評論

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