前端面试题 - 赋值/浅拷贝/深拷贝的区别?如何实现一个深拷贝?
- 赋值是拷贝的对象指针,整个对象都是共用的。
- 浅拷贝是拷贝一层,对象的内容仍是共用的,
Object.assign()
,拓展运算符都是浅拷贝。 - 深拷贝是递归拷贝深层次,
JSON.stringify()
是深拷贝,但是会忽略undefined、symbol和函数。
// 一个简单的深拷贝
function clone(target) {
if (typeof target === 'object') {
let cloneTarget = Array.isArray(target) ? [] : {}; // 考虑数组
for (const key in target) {
cloneTarget[key] = clone(target[key]);
}
return cloneTarget;
} else {
return target;
}
};
通俗易懂的前端面试题网站: https://www.front-interview.com