深拷贝和浅拷贝的区别:深拷贝和浅拷贝的使用场景是在复杂对象里,即对象的属性仍是对象,
浅拷贝是指只复制一层对象,当对象的属性是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化
//深拷贝对象 function deepCopy(value){ if(typeof value != 'object'){ return value; } let o = value.constructor == Array ? [] :{}; if(o instanceof Array){ for(let key of Object.keys(value)){ o[key] = deepCopy(value[key]); } }else{ for(let i in value){ o[i] = deepCopy(value[i]); } } return o; } let a=[11,[2,3,[4]],5,7,[9]]; let b = { a:{g:6}, b:1, c:{ d:{ e:4 }, f:5 } } let c = deepCopy(a); let d = deepCopy(b); //浅拷贝,只copy第一层的属性值,若是属性值是对象,则复制的是这个对象的引用。 function shallowCopy(src) { var dst = {}; for (var prop in src) { if (src.hasOwnProperty(prop)) { dst[prop] = src[prop]; } } return dst; }