2013-07-04 183 views
1

這裏是我的Javascript代碼:任何人都可以解釋以下Javascript代碼行爲?

var subRow = []; 
var rowarr = []; 
subRow.push({ v: "Jay" }); 
subRow.push({ v: "Ram" }); 
rowarr.push({ c: subRow }); 
subRow.length = 0; 
subRow.push({ v: "Jay1" }); 
subRow.push({ v: "Ram1" }); 
rowarr.push({ c: subRow }); 
console.log(JSON.stringify(rowarr)); 

輸出是:

[{ 
    "c": [{ 
     "v": "Jay1" 
    }, { 
     "v": "Ram1" 
    }] 
}, { 
    "c": [{ 
     "v": "Jay1" 
    }, { 
     "v": "Ram1" 
    }] 
}] 

預期輸出是:

[{ 
    "c": [{ 
     "v": "Jay" 
    }, { 
     "v": "Ram" 
    }] 
}, { 
    "c": [{ 
     "v": "Jay1" 
    }, { 
     "v": "Ram1" 
    }] 
}] 

任何人都可以解釋爲什麼會這樣呢?

回答

4

數組通過引用進行處理。

subRow.length = 0;刪除數組的內容。

rowarr則包含兩個指向同一個數組(其中只有內容在裏面,你倒空後放在那裏)

變化subRow.length = 0;subRow = []到一個新的陣列上運行修改現有的一個替代。

2

subRow指向一個對象。當您push它到rowArr您創建該對象的引用。你推兩次,這是對一個對象的兩個引用。當你編輯subRow這兩個引用對象看到的變化,所以你已經踐踏了對象的舊內容 - 他們沒有存儲在其他地方,所以他們完全丟失。您需要創建一個全新的對象,而不是編輯舊的對象。

相關問題