如果我不需要 localStorage,我的代码将如下所示:
var names=new Array();
names[0]=prompt("New member name?");
这有效。但是,我需要将此变量存储在 localStorage 中,事实证明它非常顽固。我试过了:
var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");
我哪里错了?
如果我不需要 localStorage,我的代码将如下所示:
var names=new Array();
names[0]=prompt("New member name?");
这有效。但是,我需要将此变量存储在 localStorage 中,事实证明它非常顽固。我试过了:
var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");
我哪里错了?
localStorage
只支持字符串。使用JSON.stringify()
和JSON.parse()
。
var names = [];
names[0] = prompt("New member name?");
localStorage.setItem("names", JSON.stringify(names));
//...
var storedNames = JSON.parse(localStorage.getItem("names"));
您还可以使用直接访问来设置/获取项目:
localstorage.names = JSON.stringify(names);
var storedNames = JSON.parse(localStorage.names);
该localStorage
和sessionStorage
只能处理字符串。您可以扩展默认存储对象来处理数组和对象。只需包含此脚本并使用新方法:
Storage.prototype.setObj = function(key, obj) {
return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
return JSON.parse(this.getItem(key))
}
使用localStorage.setObj(key, value)
保存一个数组或对象,并localStorage.getObj(key)
对其进行检索。相同的方法适用于sessionStorage
对象。
如果你只是使用新的方法来访问存储,每个值在保存和解析之前都会被转换为 JSON 字符串,然后由 getter 返回。
使用JSON.stringify()
和JSON.parse()
不建议!这可以防止可能罕见但可能出现的包含分隔符的成员名称问题(例如成员名称three|||bars
)。
刚刚创建了这个:
https://gist.github.com/3854049
//Setter
Storage.setObj('users.albums.sexPistols',"blah");
Storage.setObj('users.albums.sexPistols',{ sid : "My Way", nancy : "Bitch" });
Storage.setObj('users.albums.sexPistols.sid',"Other songs");
//Getters
Storage.getObj('users');
Storage.getObj('users.albums');
Storage.getObj('users.albums.sexPistols');
Storage.getObj('users.albums.sexPistols.sid');
Storage.getObj('users.albums.sexPistols.nancy');
JSON 方法有效,在 ie 7 上你需要 json2.js,它可以完美运行,尽管有一条评论说否则有 localStorage。这似乎是最省事的最佳解决方案。当然,可以编写脚本来做与 json2 基本相同的事情,但这没什么意义。
至少在以下版本字符串中有 localStorage,但如上所述,您需要包含 json2.js,因为浏览器本身不包含它:4.0(兼容;MSIE 7.0;Windows NT 6.1;WOW64;Trident/5.0;SLCC2 ;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;BRI/2;NP06;.NET4.0C;.NET4.0E;Zune 4.7)(我会对此发表评论回复,但不能)。