一、淺拷貝(只轉殖第一級)
1、不使用es6
let obj =
, d:
/^\d+$/
}let obj2 =
for(
let key in obj)
console.
log(obj,obj2)
<
/script>
2.使用es6(擴充套件運算子)
let obj =
, d:
/^\d+$/
}let obj2 =
console.
log(obj,obj2)
三、深轉殖
1、json.parse(json.stringify())
let obj =
, d:
/^\d+$/
}let obj2 =
json
.parse
(json
.stringify
(obj)
) console.
log(obj,obj2)
但需要注意,這種方法有弊端
(1).當物件是正則時,stringfy()時變成{}
(2).當物件是function時:
(3).當物件是日期時:
2、使用遞迴
function
deepclone
(obj)
if(obj ===
null
)return
null
if(obj instanceof
regexp)if
(obj instanceof
date
)// 不直接建立空物件,轉殖的結果和之前保持相同的所屬類
let newobj = obj.
constructor()
;for
(let key in obj)
}return newobj;
}let obj2 =
deepclone
(obj)
console.
log(obj2)
6 JS的尾呼叫優化
當內部函式的返回值也是外部函式的返回值時,引擎把外部函式的棧幀彈出也無影響 外部函式的返回值是乙個內部函式的返回值,滿足以下條件即可以 外部函式的返回值是對尾呼叫函式的呼叫 尾呼叫函式返回後不需要執行額外的邏輯 尾呼叫函式非閉包 比如遞迴使用尾呼叫優化 基礎框架 function fib n 執行遞...
js 陣列物件的淺轉殖
如果再考慮更奇葩更複雜的情況,例如我們定義 var obj b 2 c 這是乙個由物件 陣列雜合成的奇葩陣列,雖然我們平時寫程式基本不可能這麼折騰自己,但是可以作為一種特殊情況來考慮,這樣我們就可以結合之前說的方法去拓展拷貝函式 var objdeepcopy function source for...
JS 物件的深拷貝與淺拷貝
基本型別和引用型別 物件的深拷貝和淺拷貝 基本型別和引用型別 js中包含兩種資料型別,既基本型別和引用型別,基本型別是簡單的資料段,它是按值訪問的,因為基本型別可以操作儲存在變數中的值。而引用型別指的是那些可能由多個值構成的物件。引用型別的值是儲存在記憶體中的物件,在js中,規定不能直接訪問記憶體中...