浅克隆
只能拷贝原始值,如果存在引用值,拷贝的是引用地址。origin 更改值后 target还是会被改变
function clone(origin, target) {
var target = target || {};
for (var prop in origin) {
target[prop] = origin[prop];
}
return target;
}
var obj = {
name: \'xiaoming\',
age: 19
}
var obj1 = {};
clone(obj, obj1);
深度克隆
无论原始值还是引用值,都进行copy 互不影响
// 1. 遍历对象 for in
// 2. 判断是不是原始值 typeof
// 3. 判断是数组还是对象 toString
// 3. 建立相应的数组或对象
// 4. 递归
function deepClone(origin, target) {
var target = target || {};
for (var key in origin) {
if (origin.hasOwnProperty(key)) {
var res = .prototype.toString.call(origin[key]);
if (res === \'[ ]\') {
target[key] = {};
deepClone(origin[key], target[key]);
} else if (res === \'[ Array]\') {
target[key] = [];
deepClone(origin[key], target[key]);
} else {
target[key] = origin[key];
}
}
}
return target;
}
var obj = {
name: \'xiaoming\',
age: 28,
card: [\'visa\', \'master\'],
wife: {
name: \'xiaozhang\',
son: {
name: \'xiaoxiaoming\'
}
}
}
var obj1 = {};
deepClone(obj, obj1);
继续阅读与本文标签相同的文章
-
阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性| 9月9号栖夜读
2026-05-18栏目: 教程
-
3年Java开发6个点搞定高并发系统面试疑惑
2026-05-18栏目: 教程
-
请求支援!我被“非结构化数据包围了” | 开发者必读(060期)
2026-05-18栏目: 教程
-
研发效能提升 36 计第一课:互联网时代研发效能的挑战和应对之道
2026-05-18栏目: 教程
-
Service Mesh 发展趋势:云原生中流砥柱
2026-05-18栏目: 教程
