javascript - 对象属性在 localStorage 之后未定义

标签 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
}

附言。当我控制它时,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/

相关文章:

javascript - 如何使用 jQuery 更新属性?

jQuery 尝试查找 href 时返回 "undefined"

javascript - 数组文字作为对象键?

javascript - 从 Angularjs REST 资源发送基于文件的虚拟数据

ios - 如何获取我的 iOS 应用程序的存储空间和内存大小?

javascript - localstorage.setitem 不适用于 Angular

javascript - 将 Grails Web 应用程序转换为离线 Web 应用程序

JavaScript 是什么导致我的代码中出现 'undefined'?

javascript - ExtJS4 启动画面 app.js 返回错误

javascript - 在 Javascript 书签中动态生成整个页面