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)