JavaScript技巧之物件拷貝

2021-08-31 11:57:29 字數 1181 閱讀 3385

首先明確三個概念

1. 物件引用

var a =

var b = a ;

a===b // true,兩者指向的位址相同

b.name =

'zhangsan'

a.name //變成與b一樣的'zhangan'

上述**中,使用了=進行賦值,於是b指向了a所指向的棧的物件,也就是a與b指向了同乙個棧物件,所以在對b.name賦值時,a.name也發生了變化。為了避免上面的情況,可以對物件進行拷貝,**如下:

2. 拷貝位址(淺層拷貝)–目前使用的方法

var a =

var b = object.

assign

(, a)

a===b // false,兩者指向的位址不同

b.name =

'zhangsan'

a.name //依然還是'wanger'

上面**將原始物件拷貝到乙個空物件,就得到了原始物件的轉殖,這時候a與b指向的是不同的棧物件,這樣對b的賦值就不會影響到a

問題:但是如果a.name是乙個物件的引用,而不是乙個字串,那麼上面的**也會遇到一些問題

var a =

}var b = object.

assign

(, a)

a===b // false,b指向的位址與a不同

b.name.firstname =

'zhang'

a.name.firstname //'zhang',但是b.name與a.name指向的位址確實相同的

b.name.firstname又影響到了a.name.firstname,這是因為object.assign()方法只是淺層拷貝,a.name是乙個棧物件的引用,賦值給b時,b.name也同樣是這個棧物件的引用,很多時候,我們不想讓這種事情發生,所以我們就需要用到物件的深拷貝。

3. 深層拷貝

由於筆者目前水平有限,無法給出具體的分析,所以詳細請見

js物件進行深度拷貝

JavaScript基礎之標準物件

為了區分物件的型別,我們用typeof操作符獲取物件的型別,它總是返回乙個字串.總結一下有這麼幾條規則需要遵守 1.不要使用new number new boolean new string 建立包裝物件 2.用parseint 或者parsefloat 來轉換任意型別到number 3.用stri...

JavaScript內建物件之Array 一

array新方法 一.位置方法 1.indexof 作用 返回某元素在陣列中的第乙個出現位置。引數 第乙個為需要查詢的元素。第二個為查詢的起始位置 可選,預設為0 返回值 返回元素在陣列的位置,未找到返回 1.2.lastindxof 作用 返回某元素在陣列中的位置 反向查詢 引數 第乙個為需要查詢...

JavaScript 之 核心語法 物件

方法宿主物件 自定義物件 語法var 物件名 var obj1 console.log obj1 語法var 物件名 new object var obj2 new object console.log obj2 語法var 物件名 object.create var obj3 object.cre...