js复制object类型时,如果直接使用赋值,则会变成引用,如果想创建一个新对象,则要复制里面每一个元素
查询之后,发现两种现成的方式:
- 转为json再转回来
newObject = JSON.parse(JSON.stringify(oldObject))
- 使用Object.assign()
newObject = Object.assign({}, oldObject)
两种都可以达成,不知道哪一种比较好用?在执行速度上面
js复制object类型时,如果直接使用赋值,则会变成引用,如果想创建一个新对象,则要复制里面每一个元素
查询之后,发现两种现成的方式:
newObject = JSON.parse(JSON.stringify(oldObject))
newObject = Object.assign({}, oldObject)
两种都可以达成,不知道哪一种比较好用?在执行速度上面
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
首先指出一点错误,
Object.assign({}, oldObject)
不是深拷贝,而是浅拷贝。深拷贝方法很多,选一种适合的业务场景的就行了。
1、使用 JSON.parse(JSON.stringify(obj))。不能拷贝值为 null,undefined,函数字段。
2、使用 MessageChannel + postMessage,通过消息队列传递数据,实现深拷贝。不能拷贝函数。
3、手写一个深拷贝,解决上述方案的问题。案例