問題:存在一個對象,該對象的內部元素也為對象,子對象的元素也為對象,...(即多層對象構成的對象,具體如下),那么應該如何修改最內層元素的值(如 obj.a.a.a = 5)?
var obj = {
a: {
a:{
a: 1
}
},
b: {
b:{
b: 2
}
}
}
所要了解的JS基礎:
1. 將對象賦值給一個變量,只是將對象的地址傳給變量,並非是復制。
2. 將變量賦值給一個變量,值的傳遞是復制,而非地址傳遞。
解決方法:
1. 弄清要修改值為對象內部第幾層(這里假設為 N )的元素,如 obj.a.a.a 為 obj 對象第三層元素。
2. 設一個變量 tmp,利用循環進入到對象的第 N-1 層(這里為2),將第 N-1 層相應的對象賦值給 tmp。
var tmp = obj;
for(var i = 0;i < N-1;i++){
tmp = tmp.a;
}
3. 修改變量 tmp 下對應的要修改的元素的值,則完成元素值的修改。
tmp.a = 5;
注意: 第二步切勿通過循環將 tmp 直接賦值為 obj.a.a.a,然后第三部直接 讓 tmp = 5,因為這樣屬於變量的賦值,而非對象的賦值,其結果將只對tmp賦值,而obj對應元素的值不會變。