深拷贝
题目
手写 JS 深拷贝
分析
这是一个很常见的问题,看似也很简单,但是如果考虑到“高质量代码”的要求,写起来还是挺麻烦的。
别说写代码,就本节所有的情况你能否考虑全面,这都不一定。
错误答案1
使用 JSON.stringify
和 JSON.parse
- 无法转换函数
- 无法转换
Map
Set
- 无法转换循环引用
PS:其实普通对象使用 JSON API 的运算速度很快,但功能不全
错误答案2
使用 Object.assign
—— 这根本就不是深拷贝,是浅拷贝 !!!
错误答案3
只考虑了普通的对象和数组
- 无法转换
Map
Set
- 无法转换循环引用
正确答案
参考代码 clone-deep.ts
循环引用 Map Set 函数