我有几个项目存储在本地存储中。页面加载了什么,我有大约 20 行这样的:
var SomeVar = localStorage.getItem('SomeKey');
我想更改它并一次读取所有存储数据,将其存储在一个临时对象中,并从该临时对象中获取 20 个变量。
如何一次读取本地存储?
谢谢。
我有几个项目存储在本地存储中。页面加载了什么,我有大约 20 行这样的:
var SomeVar = localStorage.getItem('SomeKey');
我想更改它并一次读取所有存储数据,将其存储在一个临时对象中,并从该临时对象中获取 20 个变量。
如何一次读取本地存储?
谢谢。
我想不出你想要这样做的原因,但你可以利用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 个字符所花费的时间大致相同。
您可以将所有变量保存在一个对象中,并使用 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吗?http://www.jstorage.info/ 我经常使用它,它似乎做了类似的事情,因为它将所有东西都存储在一个对象下。也适用于旧版 IE 的跨浏览器。