我有不常见的数组索引的变量。这里是: http://i.imgur.com/01nH8x5.png
所以,我把它保存到本地存储中:
function Save(){
var save = {
//<...>
MapCellData: MapCellData,
MapCellDataE: MapCellDataE
//<...>
};
localStorage.setItem("save",JSON.stringify(save));
}
window.setInterval(function(){
Save()
}, 10000); // Autosave every 10 sec
然后我转到Firebug控制台并输入以下命令检查保存了哪些元素:
JSON.parse(localStorage.getItem("save"));
这就是我得到的:http://i.imgur.com/vva3mBk.png
如您所见,带有负索引和大索引的变量的所有值都未定义,而0到4的索引被正确保存。
注意:MapCellData是变量,用于确定将哪个图像应用于表格单元格,而MapCellDataE是可变的,用于确定单元格背景颜色。这两个变量都有相同的索引,因此两者都有相同的问题。没有如此奇怪的索引的变量可以正常保存。
这就是它的视觉效果。
在我重新加载页面之前:http://i.imgur.com/B3FSu5e.png
重新加载页面后:http://i.imgur.com/rhkZAa1.png
答案 0 :(得分:0)
是的,JSON.stringify
仅对Array
个对象上的数组索引 1 进行序列化,并丢弃所有其他属性。解决方案很简单 - 在shouldn't be using them:
var MapCellData = {}; // instead of []
MapCellData[weirdProperty] = …;
在JSON中,这将更加节省空间,因为你的阵列数量很少。是
1:§6.1.7, §9.4.2:数组索引是一个字符串值的属性键,它是一个规范的数字字符串,其数值i在+0≤i<1的范围内。 232-1。子>