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)