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...