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

Javascript 在一次读取中加载本地存储,javascript,local-storage,Javascript,Local Storage,我在本地存储器中存储了几个项目。页面加载的内容大约有20行,如下所示: var SomeVar = localStorage.getItem('SomeKey'); var tempLocalStorage = {}; for(prop in localStorage) { if(localStorage.hasOwnProp(prop)) { tempLocalStorage[prop] = localStorage.getItem(prop); } }

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

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

var SomeVar = tempLocalStorage["SomeKey"];
我想改变这一点,在一次读取中获取所有存储数据,将其存储在一个临时对象中,并从该临时对象中获取20个变量

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


谢谢。

我想不出您想这样做的原因,但您可以利用
localStorage
基本上是一个对象的事实,执行以下操作:

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

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



编辑:这里有一个建议。将所有变量保存到一个对象中,然后从
localStorage
加载并保存该对象,而不是保存单独的对象。访问调用的单个变量占用的时间最多。根据on
localStorage
optimization,将单个变量中的10个字符读入内存所需的时间与读取1000个字符所需的时间大致相同。

您可以将所有变量保存在单个对象中,并使用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

的脚本。您看过jStorage了吗?我经常使用它,它似乎做了一些类似的事情,它将所有东西都存储在一个对象下。也可以跨浏览器访问旧版IE。

因为每次访问属性时,都是从硬盘访问。我想一次读取硬盘上的所有数据,而不是20个。@frenchie:没错,但如果你只读取20个变量,我认为这不会导致任何性能问题,如果你担心的是这个问题的话。如果取而代之的是成百上千个变量,我会担心。我知道这将是一个最小的优化;我想知道这是否可能。frenchie:好吧,我会小心过早的优化,但是你可以看到我更新的答案,这是一种让你的
localStorage
调用速度更快的方法