首先明確三個概念
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...