深拷贝
创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象
几种实现方式:
1.JSON.parse(JSON.stringify())
- 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝
- 这种方法虽然可以实现数组或对象深拷贝,但不能处理函数
2 代码实现一个深拷贝
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script>
// 在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.
function dataType(value) {
return Object.prototype.toString.call(value).slice(8, -1);
}
function clone(value) {
let result, currentType = dataType(value)
if (currentType === 'Object') {
result = {}
} else if (currentType === 'Array') {
result = []
} else {
return value
}
for (let i in value) {
if (dataType(value[i]) === 'Object' || dataType(value[i]) === 'Array') {
result[i] = clone(value[i])
} else {
result[i] = value[i]
}
}
return result
}
var apple = {
name: 'yang',
list: {
id: [1, 2, 4],
color: 'red'
}
}
var newApple = clone(apple)
</script>
</body>
</html>