基本数据类型放在栈(stack) 引用数据类型放在堆(heap)
浅拷贝只拷贝一层目录 当数组内部有数组或者对象时 拷贝的是引用地址
for in 遍历 把目标的属性挂载到另一个目标上
function clone(target) { // 如果不是数组或者对象 if (target && typeof target !== 'object') { // 直接复制 var clone = target console.log(clone) } // 如果是数组或对象 else if (target && typeof target === 'object') { // 先判断是数组还是对象 var clone = Array.isArray(target) ? [] : {} // 遍历目标 for (var key in target) { clone[key] = target[key] } } return clone }es6方法
扩展运算符 (…)
// 数组 const targetArr = [1,2,3,[1,2],{a : 1}] const cloneArr = [...targetArr] // 对象 const targetObj = {name : 'lisi' , age : 18 , a : [1,2] , b : {name : 123}} const cloneObj = {...targetObj}Array.concat() 数组拼接
const arr = [1,2,3] const cloneArr = [].concat(arr)Object.assign() 对象拼接
const obj = { name : 'lisi' , age : 18 , lisi : { name : 'lisi'}} const cloneObj = Object.assign({} , obj)通过遍历再判断的方法 如果深层目录还是引用值 递归