为什么localStorage不接受我的对象?

时间:2017-10-18 14:43:40

标签: javascript object

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

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

我尝试了这个,但它说'未定义':

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

我该怎么做才能解决它?

解决

3 个答案:

答案 0 :(得分:7)

使用JSON.stringify()设置JSONJSON.parse()JSON转换为JavaScript对象;期待设置字符串{。}}。

答案 1 :(得分:4)

来自Using the Web Storage API

  

“存储对象是简单的键值存储,类似于对象,但它们通过页面加载保持不变。键和值始终是字符串(请注意,整数键将是自动转换为字符串,就像对象一样。“

您无法在localStorage中存储复杂的Object值。遗憾。

相反,您应该将对象序列化为字符串[hint:JSON.stringify()],然后在检索之后将其从JSON字符串解析回Object [提示:JSON.parse()]。

答案 2 :(得分:3)

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

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));