版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l598465252/article/details/78261013
javascript中,变量可以存在两种类型的值,即原始值和引用值。
简单来说,原始值就是可以通过=
直接拷贝的变量;而引用值的标识符是一个指针,指向值的地址。ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。
所以,当我们需要为一个变量创建一个副本的时候,如果是引用类型就不能直接用=
赋值。下面是一种深度拷贝的实现。
const deepCopy = function (target) {
if (!target && typeof target !== 'object') {
return;
}
let backup;
if (typeof target === 'object') {
backup = Array.isArray(target) ? [] : {};
} else {
return target;
}
for (const key in target) {
if (typeof target[key] !== 'object') {
backup[key] = target[key];
} else {
backup[key] = deepCopy(target[key]);
}
}
return backup;
}