2015-08-14 199 views
1

請參閱附件截圖。請參閱Object的pendingApp屬性。當我在eclipse中調試時,pendingApp顯示數組的對象,這是正確的!但是當我JSON.stringify(object)然後顯示我空陣列。 Eclipse Imagejavascript的奇怪行爲

Terminal Image

請讓我知道這種行爲的原因。我想我沒有意識到任何Java腳本思想/概念? :P :)

當我將這個對象保存到數據庫然後空白數組的pendingApp將被存儲!

var pending_app = []; 
var new_record = {"pendingApp" : [], "installedApp" :[] }; 
....SOME CODE+conditions HERE.... 
pending_app[appId] = {'action' : action }; 
new_record.pendingApp = pending_app; 
// create app-config data 
return app_model.create(new_record); //will return promise object 
+0

你對象列表屬性可能不是stringifyable – Hacketo

+0

它只是手動創建JavaScript對象,爲什麼不把它保存到數據庫??? –

+0

等待你的數組填滿。你使用一些異步功能,不是嗎? – Bergi

回答

1

這不是一個怪異的行爲,但使用Array存儲鍵值數據的一個常見的錯誤。

答案很簡單:使用文字對象來存儲這些數據


雖然你可以在Javascript中每個對象添加屬性,你不能對他們使用默認的陣列機制迭代

for (var i = 0; i < array.length; i++){} 
array.forEach(); 

簡單示範:

var array = []; 
array["anId"] = 1; 
array.length; // 0 

array[4294967295] = 1; // Indice >= unsigned 32-bit Max Value 
array.length; // 0 
array[4294967295]; // 1 

所以JSON.stringifyECMAScript 5 Specification將使用Array機制來遍歷所有項目,會發現什麼。

不像Objects,您可以用

Object.keys(array); // ["anId"]