深淺拷貝的理解

1、理解函數

一、深拷貝:當拷貝完一個對象的時候,其中一個對象的數據發生了變化,另外一個對象的數據也會發生變化。

  由於深拷貝拷貝的是索引

二、淺拷貝:當拷貝完一個對象的時候,其中一個對象的數據發生了變化,另一個對象的數據 不會發生變化。

  由於淺拷貝拷貝的是數值

2、知識點補充:spa

一、合併對象:code

 Object.assign()合併對象 
 參數1:須要合併的對象A
 參數2:須要進行合併的對象B
 .....

 返回值是一個合併後的對象

二、堆 和 粘 的理解對象

棧:原則  先進後出
    棧裏面基本上所有都是放的基本數據類型  和  索引 地址

堆:
    堆裏面基本上所有都是放的引用數據類型   數據都存放在堆裏面  而索引都存在棧裏面

 

3、淺拷貝的使用blog

//拷貝的對象是多層的狀況

例:
var obj = {
    person:{
        name:"QQQ",
        age:33,
        sex:"女"
    }
}    

方案一:
var newObj = Object.assign({},obj)
console.log(newObj);
newObj.person.name = "AAA";

console.log(obj,newObj)

方案二:
//合併對象 跟Object.assign用法同樣
var newObj = $.extend({},obj);

console.log(newObj)
newObj.person.name = "AAA";
console.log(obj,newObj)

方案三:
//封裝函數遍歷
function copyObj(obj){
    var newObj = {};
    for(var key in obj){ newObj[key] = obj[key] }
    return newObj;
}

var newObj = copyObj(obj);

newObj.person.name="AAA";
console.log(obj,newObj)

 

4、深拷貝的使用索引

分爲:對象是單層和多層的狀況

    //對象是單層的狀況
var obj = {
    name:"WWW",
    age:33,
    sex:"不詳"
}
方案一:
var newObj = Object.assign({},obj);
console.log(newObj);
newObj.name = "EEE";
console.log(obj,newObj)
----------------------------------------------
//對象是多層的狀況 var obj = { person: { name: "QQQ", age: 33, sex: "女" } } 方案2、 //前面加true,則表示淺拷貝(注意區別深拷貝) var newObj = $.extend(true,{},obj) console.log(newObj); newObj.person.name = "AAA"; console.log(obj,newObj) 方案三: //使用JSON.parse JSON.stringify var newObj = JSON.parse(JSON.stringify(obj)); console.log(newObj); newObj.person.name="AAA"; console.log(obj,newObj)
相關文章
相關標籤/搜索