前端面試題 - 賦值/淺拷貝/深拷貝的區別?如何實現一個深拷貝?
- 賦值是拷貝的對象指針,整個對象都是共用的。
- 淺拷貝是拷貝一層,對象的內容仍是共用的,
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