如何在localStorage中存储阵列?[重复]

如果我不需要localStorage,我的代码将如下所示:

var names=new Array(); 
names[0]=prompt("New member name?");

这可行。但是,我需要将此变量存储在localStorage中,事实证明它很顽固。我试过了:

var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");

我要去哪里错了?

神奇猴子2020/03/11 20:45:47

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"));
卡卡西理查德2020/03/11 20:45:47

localStoragesessionStorage只能处理字符串。您可以扩展默认的存储对象以处理数组和对象。只需包含此脚本并使用新方法即可:

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返回之前将其解析。

资料来源:http : //www.acetous.de/p/152

YOC602119112020/03/11 20:45:47

JSON方法可行,即在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)(我会对此发表评论)回复,但不能)。

Pro西门樱2020/03/11 20:45:46

使用JSON.stringify()JSON.parse()否建议!这样可以防止包含分隔符的成员名称(例如,成员名称three|||bars出现罕见但可能的问题