JS 没有内置直接一个克隆的 API,怎么办呢?
Object.assign
只能算 “浅复制”,因为对于引用类型,它只是以引用形式被拷贝,导致 clone 后的对象里的引用与被克隆中的引用都指向同一个对象。一次需要额外的检查进行引用类型额的赋值。
let x = { age: 99, friends: [1, 2, 3] };
let clone = Object.assign({}, x);
console.log(clone.friends === x.friends); // true
JSON.stringify
受限于 stringify 本身的限制,一些不能在 JSON 里表示的值会被抹去。。。
- 如果对象的属性是
undefined
、函数
或XML 对象
,该属性会被JSON.stringify()
过滤。对象属性会被直接删除掉。
第三方库
例如 lodash 的 cloneDeep
参考
- 现代 JavaScript 教程
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。