js的數據類型分爲基本數據類型和引用數據類型。基本數據類型是直接賦值,引用數據類型分爲淺拷貝和深拷貝。淺拷貝是複製對象的指針,深拷貝是複製對象全部屬性再內存中獨立存在。javascript
淺拷貝以下:java
var obj = {a: 'test', b: {c: 0}} var obj1 = obj var obj2 = shallowCopy(obj); function shallowCopy(src) { var dst = {}; for (var prop in src) { if (src.hasOwnProperty(prop)) { dst[prop] = src[prop]; } } return dst; } var obj3 = Object.assign({}, obj) obj.a = 'arr' obj.b.c = 1 console.log(obj) // {a: 'arr', b: {c: 1}} console.log(obj1) // {a: 'arr', b: {c: 1}} console.log(obj2) // {a: 'test', b: {c: 1}} console.log(obj3) // {a: 'test', b: {c: 1}}
深拷貝實現以下:spa
function extend (source) { var target if (typeof source === 'object') { target = Array.isArray(source) ? [] : {} for (var key in source) { if (source.hasOwnProperty(key)) { if (typeof source[key] !== 'object') { target[key] = source[key] } else { target[key] = extend(source[key]) } } } } else { target = source } return target } var obj1 = {a: {b: 0}} var cpObj1 = extend(obj1) obj1.a.b = 1 console.log(cpObj1) // {a: {b: 0}} var obj2 = [[0]] var cpObj2 = extend(obj2) obj2[0][0] = 1 console.log(cpObj2) // [[0]]