关于本篇文章的起源是一位大佬在面试的时候,询问应聘者关于浅拷贝的知识后,在应聘者的回答中,笔者发现有好一部分人对浅拷贝都是错误的,故有了此篇内容。
1. 还原现场
大佬:“如何复制一个对象?”...一探究竟
刚开始看到上面应聘者的例子的时候,其实我也认为应聘者写的是对的,因为在我的记忆里,对象的浅拷贝就是两个变量存储的值是相同的堆地址,而上面应聘者写的 a 和 b 符合这个条件,但是大佬提出异议后...1, 3, 5, { x: 1 } ];
console.log(b); // [ 2, 3, 5, { x: 1 } ];
很明显,属于浅拷贝的a和b并不是第一种定义所描述的,如果a和b是相同的引用对象...[ 1, 3, 5, { x: 2 } ];
console.log(b); // [ 1, 3, 5, { x: 2 } ];
通过上面的代码既可以看出,浅拷贝的正确定义是第二种,只拷贝已存在对象的对象属性的引用...,其余非对象属性是占用新的内存空间,并非与原对象共享。