0

我有几个项目存储在本地存储中。页面加载了什么,我有大约 20 行这样的:

 var SomeVar = localStorage.getItem('SomeKey');

我想更改它并一次读取所有存储数据,将其存储在一个临时对象中,并从该临时对象中获取 20 个变量。

如何一次读取本地存储?

谢谢。

4

3 回答 3

0

我想不出你想要这样做的原因,但你可以利用localStorage基本上是一个对象的事实并做这样的事情:

var tempLocalStorage = {};
for(prop in localStorage) {
    if(localStorage.hasOwnProp(prop)) {
        tempLocalStorage[prop] = localStorage.getItem(prop);
    }
}

var SomeVar = tempLocalStorage["SomeKey"];

我正在遍历其中的值localStorage并将它们添加到临时本地存储变量中。然后,您可以使用与 standard 相同的键访问临时本地存储变量localStorage,但使用标准对象属性语法,而不是使用的自定义getItem()语法localStorage


编辑:这是一个建议。将所有变量保存到一个对象,然后加载和保存该对象,而localStorage不是保存单独的对象。访问调用最耗时的是单个变量。根据这篇关于localStorage优化的帖子,从单个变量读取 10 个字符到内存中所花费的时间与读取 1000 个字符所花费的时间大致相同。

于 2012-05-17T00:53:29.087 回答
0

您可以将所有变量保存在一个对象中,并使用 JSON 将其与字符串相互转换:

// read:
var localvars = JSON.parse(localStorage.myvars || '{}');
// copy from temporary object to desired variable:
var someVar = localvars.someKey;
// write:
localStorage.myvars = JSON.stringify(localvars);

如果使用此方法,则必须小心不要将任何递归变量存储在 中localvars,因为这会导致JSON.stringify失败。但这并不是真正的问题,因为无论如何您都无法存储这些结构localStorage

我不建议在 localStorage 上使用 for-in 循环,因为您不应该假设您的脚本是唯一访问localStorage.

于 2012-05-17T01:38:53.290 回答
0

你看过jStorage吗?http://www.jstorage.info/ 我经常使用它,它似乎做了类似的事情,因为它将所有东西都存储在一个对象下。也适用于旧版 IE 的跨浏览器。

于 2012-05-17T01:41:57.797 回答