如果我不需要 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
和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.stringify()和JSON.parse()
这样可以防止包含分隔符的成员名称(例如,成员名称three|||bars
)可能罕见但可能出现的问题。