题目描述
Let obj={
Name:"张三",
Age:"20",
Love:{
Balls:"篮球",
Food:"三明治"
}
}
写一段代码,拷贝上面的对象obj得到objCopy,并且执行代码objCopy.Love.Food="沙拉",
不会使得obj.Love.Food的值发生改变
题目来源及自己的思路
来自隔壁老王公司的面试题,我有点懵逼,到底说的是啥,有人知道吗?
Let obj={
Name:"张三",
Age:"20",
Love:{
Balls:"篮球",
Food:"三明治"
}
}
写一段代码,拷贝上面的对象obj得到objCopy,并且执行代码objCopy.Love.Food="沙拉",
不会使得obj.Love.Food的值发生改变
来自隔壁老王公司的面试题,我有点懵逼,到底说的是啥,有人知道吗?
直接用 let objCopy = obj;
复制 objCopy 会和 obj 数据绑定,随便修改其中一个,另一个也会发生改变。
这问题问的就是如何复制可以使得复制出来的对象与原来的对象不存在数据绑定。
一般来说,简单的一维取消绑定用:
let objCopy = Object.assign({}, obj);
多维取消绑定用:
let objCopy = JSON.parse(JSON.stringify(obj));
用 Object.assign({}, obj)
的方法复制到 objCopy ,你修改 objCopy 的 Name, Age, Love 这些直接属性不会影响 obj ,但是你要修改子属性例如修改 Love.Food 还是会影响 obj 。
所以这个题目就是要用 JSON.parse(JSON.stringify(obj))
的方法。
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
5 回答1.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
确定代码不是这样:
如果是这样,那这道题其实考察的是对象深拷贝的问题,一个简单的方法: