localStorage之后未定义对象属性

时间:2015-06-01 22:38:24

标签: javascript local-storage undefined javascript-objects

我在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才能从字符串中“重新创建”一个对象。

这是关于在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
}

3 个答案:

答案 0 :(得分:1)

我的假设是你试图lines = File.ReadAllLines(RecentFiles); List< ToolStripMenuItem > items = new List< ToolStripMenuItem >(); using (StreamWriter writer = new StreamWriter(RecentFiles)) { for (int i = 0; i < lines.Length; i++) { if (File.Exists(lines[i])) { writer.WriteLine(lines[i]); items.Add(new ToolStripMenuItem() { Text = lines[i] }); } } } 一个复杂的对象,可能类似于DOM对象或其他内置API的对象。会发生什么是stringify将从所有方法中剥离对象,这包括内部setter和getter,并且你仍然使用空(或几乎为空)对象。

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

答案 1 :(得分:0)

JSON.parse()会返回object,但您将其视为array。不是推送到数组,而是向对象添加一个新项目。

答案 2 :(得分:0)

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行获得价值之前)