本地存储 - 将一个对象添加到对象数组中

4
我尝试在对象的数组中本地存储一个对象。如果我在控制台中尝试以下操作,它可以完美地工作:
theObject = {}
theObject.theArray = []
arrayObj = {"One":"111"}
theObject.theArray.push(arrayObj)

然而,如果我做我认为相同的事情,只是将结果存储在localStorage中,它会失败:
localStorage.localObj = {}
localStorage.localObj.localArray = []
stringArrayObj = JSON.stringify(arrayObj)
localStorage.localObj.localArray.push(stringArrayObj)

我遇到了以下错误...

localStorage.localObj.localArray.push(stringArrayObj)
TypeError
arguments: Array[2]
message: "—"
stack: "—"
type: "non_object_property_call"
__proto__: Error

有什么办法可以让这个工作起来吗?
谢谢
2个回答

10

在localStorage中只能存储字符串。您需要对对象进行JSON编码,然后将生成的字符串存储在localStorage中。当应用程序启动时,请对您在localStorage中保存的值进行JSON解码。

localObj = {}
localObj.localArray = []
localObj.localArray.push(arrayObj)

localStorage.localObj = JSON.stringify(localObj);
...
localObj = JSON.parse(localStorage.localObj);

2

LocalStorage只能存储键值对,其中键必须是字符串,值也必须是字符串。可以将整个对象层次结构序列化为JSON并将其保存为localStorage项。

根据V8源代码(我假设您使用的是Google Chrome,但希望这在其他JS引擎中不会有所不同),当未定义或空值上调用方法时,将出现具有“non_object_property_call”消息的类型错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接