//程序中的拷贝,大多数是发生在数据之间的拷贝.
//简单类型的数据: 直接拷贝值
//复杂类型的数据: 拷贝的是地址
复杂类型直接的拷贝:
浅拷贝
//a): 浅拷贝: 在对原始数据进行拷贝的时候,只拷贝一层数据,如果遇到对象,则
//直接将对象的地址进行拷贝
//b): 浅拷贝语法: Object.assign(新对象, 被拷贝的对象)
//代码验证:
// let obj = {
// uname: 'zs',
// mylike: {
// pname: '老苏'
// }
// }
// let newObj = {};
// //浅拷贝语法,将obj对象的值复制给newObj
// Object.assign(newObj, obj);
// //面试最关键的一段代码如下:
// newObj.uname = '老段';
// newObj.mylike.pname = 'pink';
// console.log(newObj); // uname: 老段 pname: pink
// console.log(obj); // uname: zs pname: pink
//浅拷贝做总结:
//1. 浅拷贝在拷贝的过程中遇到对象只会拷贝地址,且影响原始的数据
深拷贝
//a): 深拷贝: 在对原始数据进行拷贝的过程中,会将原始的数据再拷贝一份进行复制
//深拷贝之后不会影响原始数据
//b): 语法1: JSON.stringify(obj);
//c): 返回值: 返回一个对象形式的字符串
//d): 语法2: JSON.parse(返回值)
//e): 返回值: 将字符串转为一个对象,返回的是一个对象
let obj = {
uname: 'zs',
msg: {
pname: '老苏'
}
}
let newObj = {};
// 代码演示:
//1. 先将被拷贝的对象转化为字符串
let obj_res = JSON.stringify(obj);
//2. 将字符串转化为对象后拷贝
newObj = JSON.parse(obj_res);
newObj.uname = '老段';
newObj.msg.pname = 'pink';
console.log(newObj); // uname 老段 pname: pink
console.log(obj); // uname zs pname: 老苏
//总结:
// 1. 浅拷贝会影响原始数据
// 2. 深拷贝不会影响元素数据