非指標 複製物件和陣列的兩種方法

2022-07-26 20:06:12 字數 802 閱讀 4569

js在複製物件的時候,複製的是指標。有複製關係的兩個物件,乙個改變時另乙個的值也跟著變了。陣列也是物件,也存在這種現象。

實現物件的非指標複製的最簡單方法:

var obj2 = json.parse(json.stringify(obj1));

原理就是利用json方法,先將物件obj1轉成字串,再解析為物件賦值給obj2。這樣obj1和obj2就指向記憶體中的不同物件了,雖然值一樣,但是檢測 obj1==obj2 得到 false 。

題外話:物件和陣列的相等判斷,得到的結果不是字面量一不一樣,而是其指標是否指向同乙個物件位址。

為了讓方法更有普適性,可以寫成下面這樣:

function copy(obj)else

}var obj1 = ;

var obj2 = copy(obj1);

obj2.a = 11;

console.log(obj1.a); // 1

obj1 == obj2; // fasle

另一種方法,是利用遍歷,查詢所有屬性並單獨複製。這需要區分陣列和物件,為了進行深度複製,還需要進行遞迴:

function copy(obj) 

return newobj;

} else if (typeof obj == "object" && obj != null) ;

for (var i in obj) else

}return newobj;

} else

}

指標運算元組的兩種方法 總結

指標運算元組,方法一是p index,方法二是p index 第二種方法跟陣列訪問方法是一樣的。陣列引用返回的是陣列的第乙個元素的指標位址。可以將指標指向陣列的任意元素,然後從那裡開始訪問,只要注意不越界就行了,這程式設計客棧說明陣列只是將元素連續堆疊,並不需要也沒有其他的配置資訊存放在陣列元素之外...

c 基礎 指標訪問陣列兩種方法 下標法 指標法

include void main p a,i cout 下標方式 for i 0 i 5 i cout for p a pcout p t cout 對以上程式理解 包含iostream標頭檔案 定義主函式main 定義整形陣列a,陣列a中有五個元素,分類為23,12,45,33,67,又定義乙個...

QTP檢查鏈結物件的兩種方法

在 qtp中,對於網頁鏈結的 測試可以使用link物件,例如下面的指令碼用於對鏈結的位址進行檢查 browser welcome mercury tours page welcome mercury tours link register checkproperty url 其中使用了checkpr...