1.浅拷贝
- 核心:只拷贝第一层,深层共用引用(第一层改了没事,深层改了会影响原对象)
|
方法 |
适用 |
特点 |
|
{...obj} |
对象 |
ES6,最常用 |
|
[...arr] |
数组 |
ES6,最常用 |
|
Object.assign({},0bj) (Object.assign(目标对象, 源对象1, 源对象2, ...)) |
对象 |
兼容好 |
|
arr.concat() |
数组 |
合并+拷贝 |
|
arr.slice() |
数组 |
截取+拷贝 |
2.深拷贝
- 完全独立复制一个新对象,所有层级都不共享。(修改新对象,不影响原对象)
- 最简单方法(90%都适用,数组、对象、基本数据类型都支持)
JSON.parse(JSON.stringify(obj))
- 最完美方法(手写递归,全能,支持Date、数组、对象,无JSON限制)
- ‘
function deepClone(obj){ // 如果是null、基本数据类型,直接返回,基本数据类型直接复制值,不共享地址,修改互不影响 if(obj===null||typeof obj !== "Object") return obj; // 如果是日期对象,返回一个新日期 if(obj instanceof Date) return new Date(obj); // 如果是数组,递归处理每一项,返回一个新数组(用map) if(obj instanceof Array){ return obj.map(item=>deepClone(item)) }; // 如果是对象,把每一项属性都遍历递归拷贝,返回一个新对象(用for...in) if(obj instanceof Object){ let newObj={} for(let key in obj){ newObj[key]=deepClone(obj[key]) return newObj } }


被折叠的 条评论
为什么被折叠?



