2020面試準備6 js物件的淺拷貝和深拷貝

2021-10-02 20:29:24 字數 1250 閱讀 4955

一、淺拷貝(只轉殖第一級)

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中,規定不能直接訪問記憶體中...