深拷貝
創建一個新的物件和陣列,將原物件的各項屬性的“值”(陣列的所有元素)拷貝過來,是“復制”而不是“參考”
注:該代碼只能夠傳物件,其他類不行,
const add={ //定義的一個物件
name:"小灰灰",
age:9,
sex:{sex:"男"},
arr:["a","b","c"]
}
//遞回函式
function deepClone(obj){
//obj 是 null ,或者不是物件和陣列,直接回傳
if(typeof obj!== "object"||obj==null){
return obj;
}
let result //初始化變數
//判斷是不是一個陣列
if(obj instanceof Array){
result=[]
}else{
result={}
}
//回圈obj
for(let key in obj){
//判斷 key 不是一個原型屬性
if(obj.hasOwnProperty(key)){
//呼叫遞回函式
result[key]=deepClone(obj[key])
}
}
//回傳資料
return result
}
//將add拷貝到obj1中
const obj1=deepClone(add)
console.log(obj1.arr) //列印結果 ["a","b","c"]
//給資料arr的第一個值重新賦值
obj1.arr[0]="d"
console.log(obj1.arr) //列印結果 ["d","b","c"]
console.log(add.arr) //列印結果 ["a","b","c"]
總結
希望各位,路過的朋友,多多指教,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229427.html
標籤:其他
