JavaScript实现深拷贝(深复制) 面试题

时间:2023-03-10 03:29:30
JavaScript实现深拷贝(深复制) 面试题

1、两种方法实现深拷贝(深复制)

(1)方法一:兼容性好,请仔细看代码(网上大部分代码有Bug)

(2)方法二:需要对象满足JSON数据格式。JOSN数据格式:http://www.cnblogs.com/mengfangui/p/8257269.html

(3)使用类库,如lodash的_.cloneDeep(value)方法。

2、代码

<!DOCTYPE html>
<html lang="zh"> <head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>JavaScript实现深拷贝(深复制)</title>
</head> <body> <script>
var obj = {
name: null,
age: 10
}
//方法一:兼容性好
function deepClone(obj) {
var o = obj instanceof Array ? [] : {};
for(var k in obj) {
//有bug(属性的值为null时)
//o[k] = typeof obj[k] === 'object'?deepClone(obj[k]):obj[k];
if(typeof obj[k] === 'object' && obj[k] != undefined) {
o[k] = deepClone(obj[k]);
} else if(typeof obj[k] === 'object' && obj[k] == undefined) {
o[k] = null;
} else {
o[k] = obj[k];
}
}
return o;
}
//方法二:只能处理符合JSON格式的对象
function deepClone2(obj) {
return JSON.parse(JSON.stringify(obj))
}
console.log(deepClone(obj));
console.log(deepClone2(obj));
</script>
</body> </html>

3、浅拷贝;

Object.assign()函数