vuvivian's blog

越努力,越幸运.

  1. 1. 对象的赋值
  2. 2. 对象深拷贝

对象的赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 首先在栈开辟一个空间a存放指针地址,设指针地址为address1;同时会在堆里面开辟一个空间放置对象数据
let a = {'name': '小王', 'age': 12};

// a赋值给b,此时b会在栈开辟一个空间b,用来放置address1,这个指针指向a所在堆的对象数据
let b = a;

// 修改赋值后的值b,其实就是修改b的指针address1所指向的对象数据
b.sex = 'boy';

// 修改b会影响原数据(所有层次的数据都会影响)
// 这个原数据其实不是原数据,因为a和b其实都是同一个数据
// 就像从中国去美国,可以从a地点(比如北京)或者b地点(比如上海)坐飞机去,但是到达的都是同一个地方(也就是对象数据)
b.name = "王五";

console.log(a, b)
console.log(b === a); // true

对b的修改会影响a原本的值。对a的修改同样会同步b的值.

对象深拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @param {obj}
* @description 对象深拷贝
*/
export const copyObject = (obj) => {
if (!(obj instanceof Array)) {
let newObj = Object.assign({}, obj);
return newObj;
} else {
return obj.map((item) => {
let newObj = Object.assign({}, item);
if (item.children && item.children.length > 0) {
let temp = copyObject(item.children);
newObj.children = temp;
}
return newObj;
});
}
}
本文最后更新于 天前,文中所描述的信息可能已发生改变