深度克隆
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>对象的深度克隆</title>
</head>
<body>
<script type="text/javascript">
/**
* 用于判断数据类型(精准)
* @param data
* @returns {number}
*/
function getType(data) {
return Object.prototype.toString.call(data).slice(8,-1).toLowerCase()
}
//深度克隆
function deepClone(target) {
let result
if(getType(target) === 'array'){
result = []
}else if(getType(target) === 'object'){
result = {}
}else{
//如果传入的不是数组,不是对象,则直接返回,因为不需要再进行深度克隆了。
return target
}
//循环遍历出入的数组或者对象,依次取出里面的内容放入提前准备好的容器(result)
for (let key in target){
let item = target[key]
if(getType(item) === 'array' || getType(item) === 'object'){
//拆到不能再拆
result[key] = deepClone(item)
}else{
result[key] = target[key]
}
}
return result
}
</script>
</body>
</html>