在localStorage之后对象属性未定义

本·拉西科特(Ben Racicot)

我在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对象看起来完全正常。关于道具为何未定义的任何想法?

更新:数据实际上是一个数组,遍历它确实为我提供了其中的每个值。但是,数组中的每个JSON对象都不再是对象,而必须经过JSON.parsed才能从存在的字符串中“重新创建”对象。

这是将JSON对象存储在localStorage中的数组中的非常不错的一课。

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
}
摩西

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章