var obj1 = {
name : "true",
}
var obj2 = obj1;
obj1.name = "false";
console.log(obj2.name);//列印false
var obj1 = {
name : "true",
}
var obj2 = obj1;
obj1 = {
name : "false",
}
console.log(obj2.name);//列印true
想知道為什么這兩種列印的結果不一樣?
uj5u.com熱心網友回復:
第一種情況,兩個變數指向同一個記憶體地址。uj5u.com熱心網友回復:
這個地方我知道,因為這是參考值,只想同一個堆。我就是搞不懂第二種情況


uj5u.com熱心網友回復:
將變數賦值為物件的時候,變數保存的是這個物件的記憶體地址,所以第二種里obj1的地址被改變了,和obj2不是同一個物件。uj5u.com熱心網友回復:
js中物件和陣列是按參考地址傳遞的。參考不同于C語言中的指標。參考只在讀取資料時有效,當對變數寫入資料時,原有的參考就會斷開。
當把一個物件從一個變數傳遞到另一個變數中時,兩個變數都指向這同一個陣列的參考地址。
var obj2 = obj1;
obj2 和 obj1變數都指向同一個物件的參考地址。
但是這種參考只在讀取變數時有效,當對變數重新賦值時,原有的參考就會斷開。
obj1 = { name : "false", }
obj1變數重新指向一個新物件的參考地址。不會影響到obj2變數。
uj5u.com熱心網友回復:
原來是這樣啊,謝謝
uj5u.com熱心網友回復:
感謝你的回復!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/53111.html
標籤:JavaScript
上一篇:C#及ASP.net添加表格
