关于javascript:为什么localStorage不接受我的对象?

Why isn't localStorage accepting my object?

本问题已经有最佳答案,请猛点这里访问。

我需要在localstorage中存储一个类似于下面示例中的对象。我需要能够检索这个对象并对其进行编辑,然后将其保存回localstorage,以便下次使用。

1
var data = {lastEdit:"September", expires:"December", records:[{arrives:"12:45", departs:"12:51"}, {arrives:"13:03", departs:"13:04"}]};

我试过了,但它说‘未定义’:

1
2
localStorage.setItem("dataStore1", data);
var output = localStorage.getItem("dataStore1");

我能做些什么来修复它?

解决了的


使用JSON.stringify()设置JSONJSON.parse()JSON转换为javascript对象;localStorage需要设置字符串。


通过使用Web存储API:

"Storage objects are simple key-value stores, similar to objects, but they stay intact through page loads. The keys and the values are always strings (note that integer keys will be automatically converted to strings, just like what objects do)."

不能在本地存储中存储复杂的Object值。对不起的。

相反,您应该将对象序列化为一个字符串[提示:JSON.stringify(),然后在从JSON字符串检索到对象[提示:JSON.parse()]后进行解析。


localStorage仅限于字符串键/值对,存储前使用JSON.stringify(),检索后使用JSON.parse()

1
2
3
4
5
6
7
8
9
var testObject = { 'one': 1, 'two': 2, 'three': 3 };

// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));

// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');

console.log('retrievedObject: ', JSON.parse(retrievedObject));