对象属性在 localStorage 之后未定义

Object properties are undefined after localStorage

我在 localStorage 中存储了一堆值。具体来说,其中包含 JSON 个对象的数组。 当我想向该数组添加另一个对象时,我是这样拉它、解析它、推入数组并再次设置它的。

var clickedItem = sessionStorage.getItem('location'),
interest = [],
interests = localStorage.getItem('interests');
interestsParsed = JSON.parse(interests);
interestsParsed.push(clickedItem);
localStorage.setItem('interests', JSON.stringify(interestsParsed));

稍后,如果我拉取数组并循环遍历数组,我的属性是未定义的。

var data = JSON.parse(localStorage.getItem('interests'));

for(var i = 0, j = data.length; i < j; i++ ){
    console.log(data[i].anything); // any property is undefined
}

PS。 JSON 对象在我对其进行控制台时看起来完全正常。知道为什么 props 会是未定义的吗?

更新: 数据实际上是一个数组,循环遍历它确实为我提供了其中的每个值。但是,数组中的每个 JSON 对象不再是对象,并且必须是 JSON.parsed 到 "recreate" 字符串之外的对象。

关于在 localStorage 的数组中存储 JSON 个对象,这是一个非常好的课程。

var data = JSON.parse(localStorage.getItem('interests'));

for(var i = 0, j = data.length; i < j; i++ ){
    console.log(data[i].anything); // any property is undefined
    var obj = JSON.parse(data[i]); // parse it instead
    console.log(obj.title); // use it as an object now
}

JSON.parse() returns 一个 object 但你把它当作一个 array。不是推送到数组,而是向对象添加一个新项。

我的假设是您正在尝试 stringify 一个复杂的对象,可能类似于 DOM 对象或另一个内置 API 的对象。发生的事情是 JSON.stringify 将从所有方法中剥离对象,这包括内部 setter 和 getter,而您仍然是一个空的(或几乎是空的)对象。

在这种情况下,我的解决方案是将复杂的对象解析为一个简单的对象,其中只包含您选择的格式所需的属性。

localStorage 只支持字符串。使用 JSON.stringify() 和 JSON.parse()。

//demo value
var clickedItem = {"testValue":111};
var interests = [{'a':1},{'b':2},{'c':4}];
localStorage.setItem('interests', JSON.stringify(interests));
//demo value end
interest = [],
interests = localStorage.getItem('interests');

interestsParsed = JSON.parse(interests);
interestsParsed.push(clickedItem);
console.log(interestsParsed);
localStorage.setItem('interests', JSON.stringify(interestsParsed));

var data = JSON.parse(localStorage.getItem('interests'));

for(var i = 0, j = data.length; i < j; i++ ){
   console.log(data[i]);
}

我认为你没有将兴趣的价值字符串化,(在第 3 行获得价值之前)