我在 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
}
附言。当我控制它时,JSON 对象看起来完全正常。知道为什么 props 会是未定义的吗?
更新: 数据实际上是一个数组,循环遍历它确实为我提供了其中的每个值。但是,数组中的每个 JSON 对象都不再是一个对象,必须进行 JSON.parsed 才能从它的字符串中“重新创建”一个对象。
这是关于在 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
}
最佳答案
我的假设是您正在尝试stringify
一个复杂的对象,可能类似于 DOM 对象或另一个内置 API 的对象。发生的情况是 JSON.stringify
将从所有方法中剥离对象,这包括内部 setter 和 getter,而您仍然拥有一个空(或几乎为空)的对象。
在这种情况下,我的解决方案是将复杂的对象解析为一个简单的对象,其中只包含您选择的格式所需的属性。
关于javascript - 对象属性在 localStorage 之后未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584476/