<<script type=\"text/javascript\">/** 实现原理:基本数据类型,拷贝之后,修改拷贝后的数据,原数据不会受到影响;* 实现方法: 递归,判断数据类型** *///调用对象原型上的toString,通过call绑定当前data,通过当前data调用toString// 通过该方法可以精准的判断当前数据属于何种数据类型function checkDataType(data) {return Object.prototype.toString.call(data).slice(8, -1)}let arr = [1, 2]console.log(checkDataType(arr)) //Array// 递归实现深度克隆function cloneData(data) {let result, dataType = checkDataType(data)// 通过dataType判断的类型,确定result的初始值switch(dataType) {case \'Array\' :result = []break;case \'Object\' :result = {}break;default :return data;break;}for (let i in data) {//循环取到每个value值let value = data[i]if(checkDataType(value) === \'Array\' || checkDataType(value) === \'Object\') { //再判断数据类型// 递归重走result[i] = cloneData(value)}else { //如果为基本数据类型,就直接放进新的对象或者数组result[i] = value}}return result}let arr1 = [1, 2, 3 ,{name:\'abc\',age:18}]let arr2 = cloneData(arr1)console.log(arr2)arr2[3].name = \'8888\'console.log(arr1, arr2)</script>
JS实现数据的深度克隆
未经允许不得转载:爱站程序员基地 » JS实现数据的深度克隆