奇怪的行为的JavaScript

请参阅附件截图。 请参阅Object的pendingApp属性。 当我在Eclipse中debugging然后pendingApp显示数组的对象,这是正确的! 但是当我是JSON.stringify(object)然后显示我空数组。 Eclipse图像

终端图像

请让我知道这种行为的原因。 我想我不知道任何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 

这不是一个奇怪的行为,而是使用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 

因此,使用ECMAScript 5规范的 JSON.stringify将使用Array机制遍历所有项目,并且什么也找不到。

与可以列出属性的Objects不同

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