【问题标题】:Values of variables with negative and big array indexes does not save in local storage具有负数和大数组索引的变量值不会保存在本地存储中
【发布时间】:2015-11-30 22:46:31
【问题描述】:

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

【问题讨论】:

  • 什么是“不常见的数组索引”?您的代码没有显示任何数组。
  • 是的,JSON.stringify 仅序列化 Array 对象上的数组索引,并丢弃所有其他属性。解决方法很简单:shouldn't be using them 时不要使用数组。
  • 索引显示在第一张图片(Firebug DOM)上。它是带有负数的索引和带有非常大数字的索引。
  • definition,数组索引是正整数。
  • 但是,在我尝试将变量保存到本地存储之前,一切正常。它也没有解释为什么大数组索引也不能保存。

标签: javascript arrays local-storage negative-number


【解决方案1】:

是的,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

【讨论】:

  • 谢谢,这个解决方案很完美。我不知道有这么方便的数组替换。
猜你喜欢
  • 2013-07-19
  • 2018-05-15
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
相关资源
最近更新 更多