不得不说,自己进步很多。现在爱用let b = JSON.parse(JSON.stringify(a)) 不管a是数组还是对象。简单粗暴。。常用拷贝:数组用Array.from或Array.of, 对象用Object.assign()...i like ES678...
今天开发时遇到一个问题,一般来说,数组的拷贝 var a = [1,2,3] , b = a.slice(0)即可,或者b = a.concat().或者b = [].concat(a)
但是深一层的话b拷贝a后,b内部和a还是指向同一块地址,比如a = [1,{c:2}] ,b = a.slice(0) ,,后面改变b[1].c = 3,发现a[1].c也变成3了....
这就涉及到数组的深度拷贝。。于是花了几分钟写一个递归函数,
var deepCopy = function (source) { var result; if (typeof source == "object" && source instanceof Array) { result = []; for (var i = 0, len = source.length; i < len; i++) { result[i] = typeof source[i] === "object" ? deepCopy(source[i]) : source[i]; } } else if (source instanceof Object) { result = {}; for (var key in source) { result[key] = typeof source[key] === "object" ? deepCopy(source[key]) : source[key]; } } return result; };
调用下即可,b = deepCopy(a)再改变b[1].c = 3,发现a[1].c不变了....