亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript中的淺拷貝是什么意思

發布時間:2021-09-07 15:14:11 來源:億速云 閱讀:139 作者:chen 欄目:編程語言

本篇內容主要講解“javascript中的淺拷貝是什么意思”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“javascript中的淺拷貝是什么意思”吧!

1、簡單復制對象的最外層屬性,不處理對象更深層次的對象屬性,會導致復制對象和原始對象的深層次屬性指向同一個內存。

2、如果一個對象改變了內存的地址,就會影響另一個對象。

將對象序列化為JSON字符串,然后通過JSON.parse()將字符串生成新的對象,實現深度復制。

實例

        let arr = [],
 obj = {
a: 1
}
for(let i = 0; i < 3; i++) {
 
arr.push(obj)
 
}
// 基本變量的值一般都是存在棧內存中,而對象類型的變量的值存儲在堆內存中,棧內存存儲對應空間地址。基本的數據類型: Number 、Boolean、Undefined、String、Null。
console.log(arr) //[{ a: 2 },{ a: 2 },{ a: 2 }] 內存地址被替換指向{a:2}
console.log(JSON.parse(JSON.stringify(arr))) //[{ a: 1 },{ a: 1 }]防止重新賦值
console.log(obj)//{a:1}
//當我們執行obj.a = 2 時,堆內存就有新的對象{a:2},棧內存的b指向新的空間地址( 指向{a:2} ),而堆內存中原來的{a:1}就會被程序引擎垃圾回收掉,節約內存空間。
obj.a = 2
console.log(obj)//{a:2}
console.log(arr) //[{ a: 2 },{ a: 2 }]
 
console.log("//")
 
// 深拷貝  如果對象的屬性值為一般類型(string, number),通過Object.assign({},srcObj)得到的新對象是深拷貝
let obj1 = {
a: 1,
b: 2
};
 
let obj2 = Object.assign({}, obj1, {
b: 20
});
 
console.log('obj1', obj1); // { a: 1, b: 2 }
console.log('obj2', obj2); // { a: 1, b: 20 }
 
console.log("//")
 
// 淺拷貝  如果屬性值為對象或其它引用類型,通過Object.assign({},srcObj)得到的新對象是淺拷貝
obj1 = {
a: 1,
b: {
c: 2,
d: 3
}
};
obj2 = Object.assign({}, obj1);
obj2.a = 10;
obj2.b.c = 20;
console.log('obj1', obj1); // { a: 1, b: { c: 20, d: 3 } }
console.log("obj2", obj2) //{ a: 10, b: { c: 20, d: 3} }
console.log("//")
//Object.assign({})和Object.assign()   里面加與不加{}的區別   ;
var test1 = {
a: 'a'
},
 
test2 = {
b: {
c: 1
}
};
 
// Object.assign({}) 原始對象不會被改變
console.log(Object.assign({}, test1, test2)); //合并之后{ a: "a", b: {c:1} }
console.log(test1) // {a:'a'}
console.log(test2) // {b:{c:1}}
// Object.assign() 原始對象會被改變(改變的只是被覆蓋的原始對象test2覆蓋test1)
console.log(Object.assign(test1, test2)); //合并之后{ a: "a", b: {c:1} }
console.log(test1) //{ a: "a", b: {c:1} }
console.log(test2) // {b:{c:1}}
//當替換一下被覆蓋的對象test1覆蓋test2
console.log(Object.assign(test2, test1)); //合并之后{ a: "a", b: {c:1} }
console.log(test1) //{ a: "a"}此結果是在上面test2覆蓋test1測試注釋情況下得到,如果不注釋打印得到{ a: "a", b: {c:1} },因為上面test1={ a: "a", b: {c:1} }
console.log(test2) // { a: "a", b: {c:1} }

到此,相信大家對“javascript中的淺拷貝是什么意思”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

醴陵市| 通化市| 彭阳县| 卓资县| 隆尧县| 祥云县| 莱芜市| 黔西| 大余县| 南涧| 泽州县| 英吉沙县| 梅河口市| 丹巴县| 葫芦岛市| 确山县| 托里县| 冀州市| 石城县| 安阳市| 丰都县| 巴南区| 仪陇县| 宜城市| 华安县| 乌拉特前旗| 云龙县| 青神县| 平阳县| 包头市| 兴仁县| 南川市| 繁峙县| 德阳市| 五莲县| 吉木乃县| 北碚区| 交口县| 桑日县| 徐州市| 锦屏县|