在一次读取中加载本地存储

时间:2012-05-17 00:47:31

标签: javascript local-storage

我有几个项目存储在本地存储中。页面加载的内容,我有大约20行:

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

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

如何在一次读取中读取本地存储?

感谢。

3 个答案:

答案 0 :(得分:0)

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

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

var SomeVar = tempLocalStorage["SomeKey"];

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


修改:这是一个建议。将所有变量保存到一个对象,然后从localStorage加载并保存该对象,而不是保存单独的对象。这是访问花费最多时间的调用的单个变量。根据{{​​1}} localStorage优化this post,将单个变量中的10个字符读取到内存中需要大约相同的时间才能读取1000个。

答案 1 :(得分: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的脚本。

答案 2 :(得分:0)

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