为什么我在localStorage中设置的内容与我得到的内容不一样?

Mda*_*daG 1 javascript html5 google-chrome local-storage backbone.js

考虑以下代码:

myObj = new BackboneModel({'a_key': {'c_key': c_val, 'd_key': d_val}, 'b_key': b_value});
localStorage.setItem('myObj', myObj);
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用Chrome开发人员工具检查数据,我会得到:

> myObj
r {cid: "c1", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
> localStorage
Storage {myObj: "[object Object]"}
> myObj.get('a_key')
Object {c_key: Object, d_key: Object}
> localStorage.getItem('myObj')
"[object Object]"
Run Code Online (Sandbox Code Playgroud)

即)我没有得到我设定的...

我错误地使用localStorage了吗?

我怎样才能得到我设定的内容?

注意:我认为我的backbone.js模型的细节在这里是无关紧要的.

解决了

// Set
var objDict = {'a_key': {'c_key': c_val, 'd_key': d_val}, 'b_key': b_value};
myObj = new BackboneModel(objDict);
localStorage.setItem('myObj', objDict);
...
// Get
var objDict = JSON.parse(localStorage.getItem('myObj'));
myObj = new BackboneModel(objDict);
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 6

localStorage只能直接存储字符串,而不是对象 - 如果你试图存储一个它将调用.toString()该对象的对象,因此[object Object].

通常,我建议您JSON.stringify在插入对象时以及JSON.parse检索它们时使用.

但是,您应该注意,通过JSON(或任何其他中间格式)将不会保留与该对象关联的任何方法或原型链.您获得的对象将具有与您的模型相同的内容,但它不会一个BackboneModel.