具有负数组索引和大数组索引的变量值不会保存在本地存储中

时间:2015-11-30 22:46:31

标签: javascript arrays local-storage negative-number

我有不常见的数组索引的变量。这里是: 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

1 个答案:

答案 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。