<script>//深拷贝:// 对于基本数据类型来说,拷贝的是栈// 对于复杂数据类型也就是对象来说,拷贝的是堆。深拷贝后引用地址是不同的function deepClone(val){// val是数组if(Array.isArray(val)){let cloneArr = []for(let i = 0;i < val.length; i++){cloneArr[i] = deepClone(val[i])}return cloneArr}// val是对象if(typeof value === 'object' && value !== null){let cloneObj = {}for(let j in value){cloneObj[j] = deepClone(value[j])}return cloneObj}// val是简单数据return val}let str = 'abc'let num = 111let arr = [1,[1,3,4],0,{a:'sdf',b:'ds'}]let obj = {a:'aaa',b:{c:1,d:'ddd'}}let nthing = nulllet cloneStr = deepClone(str)let cloneNum = deepClone(num)let cloneArr = deepClone(arr)let cloneObj = deepClone(obj)let cloneNthing = deepClone(nthing)console.log(str === cloneStr) //trueconsole.log(num === num) //trueconsole.log(arr[1],cloneArr[1],arr[1] === cloneArr[1]) //[1,3,4] [1,3,4] falseconsole.log(arr[0],cloneArr[0],arr[0] === cloneArr[0]) //1 1 trueconsole.log(obj.a,cloneObj.a,obj.a === cloneObj.a) // 'aaa' 'aaa' trueconsole.log(obj.b,cloneObj.b,obj.b === cloneObj.b) // {c: 1, d: 'ddd'} {c: 1, d: 'ddd'} trueconsole.log(cloneNthing === nthing) //true</script>