检查 localStorage 项目是不是存在不起作用

Posted

技术标签:

【中文标题】检查 localStorage 项目是不是存在不起作用【英文标题】:Checking if localStorage item exists is not working检查 localStorage 项目是否存在不起作用 【发布时间】:2018-02-15 04:59:21 【问题描述】:

我已经搜索了这么多小时仍然没有解决我的问题:无法检查 localStorage 中是否存在密钥。

在我的聊天应用程序中,一旦用户打开一个新选项卡,我想检查是否已经有注册用户,我使用 localStorage 变量通过以下方式进行检查:

window.addEventListener('load', function () 
    var s=localStorage.getItem("localStor");
    if (s === null)
        console.log("is null"); //does not enter here
    else
        console.log(s); // prints [object *O*bject]
        console.log(JSON.parse(s).name);  //getting an error (see below)
     
, false);

解析时出现错误:

未捕获的 SyntaxError:位置 1 处 JSON 中的意外标记 o 在 JSON.parse (<anonymous>)

我在localStorage 中设置localStor 项的第一个位置是仅在注册之后,并且它位于仅在单击按钮html 元素时调用的函数内。但从逻辑上讲它不应该进入从一开始就在else

知道为什么这不起作用吗?任何帮助表示赞赏。

【问题讨论】:

验证您的 JSON 并将所有内容写入 try..watch @vsync 没有任何改变,我试图提醒错误但什么也没发生 您做得正确,如此处所述:***.com/questions/3262605/… 我怀疑您的JSON.parse() 中的name 属性无效......或类似的东西。尝试仅记录 JSON.parse(s) 结果以查看您的值是什么样的。 @Marc,我担心的不是错误,请再读一遍 是的,@user8244016,我了解您的问题。我认为您的项目位于 localStorage 中,否则 getItem() 将返回 null。以下是关于 localStorage 何时被清除的一些信息:***.com/questions/8537112/… 【参考方案1】:

你好像忘记在存储到localStorage之前序列化你的对象,你需要使用

localStorage.setItem('localStor', JSON.stringify(yourObject));

那么这应该可以按预期工作。

由于您的localStorage 中似乎存在恶意项目,您可能需要重置localStorage 并重试:

localStorage.clear()

【讨论】:

我的目标不是在本地存储中设置项目,我无法检查本地存储中是否存在项目 我明白这一点,但问题是对象未正确设置为 localStorage,因此您的 JSON.parse() 调用失败。 它不应该首先进入else语句,我不是在问错误.. 我不明白你的问题,你已经正确地检查了localStorage中是否存在一个项目。该项目不是null,因此您的代码正在处理else 块。听起来您的代码可能会在您不想设置时设置 localStorage 项目。仅供参考,localStorage不是选项卡独有的,它们是域独有的。如果你想为每个新标签重置它,你需要使用sessionStorage 也许您应该发布该代码,因为看起来可能会发生其他事情。如果不是这种情况,您可能只想清除 localStorage 并重试【参考方案2】:

您需要使用JSON.stringify 序列化您的对象,然后再将其放入本地存储。

您的代码是否首先将localStor 对象放在本地存储中?如果是这样,当您这样做时,需要在放入之前对其进行序列化,以便以后可以使用JSON.parse 成功读取。

如果localStorage.getItem 不返回null,那么您请求的密钥在localStorage 中。它的返回值不会说谎。事实仍然是,您从 getter 中获取了一个未序列化的对象,因此您需要找出该对象错误地放入 localStorage 的位置。

【讨论】:

我的目标不是在本地存储中设置项目,我无法检查本地存储中是否存在项目 您的代码是否首先将localStor 对象放在那里?如果是这样,当你这样做时,它需要在放入之前进行序列化,以便以后可以使用JSON.parse 成功读取。 "你的代码是不是一开始就把localStor对象放在那里了",不,没有,请再读一遍问题 嗯。好吧,如果localStorage.getItem 不返回null,那么您请求的密钥在localStorage 中。它的返回值不会说谎。事实仍然是,您从 getter 中获取了一个未序列化的对象,因此您需要找出该对象错误地放入 localStorage 的位置。

以上是关于检查 localStorage 项目是不是存在不起作用的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 LocalStorage:检查密钥是不是存在[重复]

检查本地存储值是不是存在[重复]

检查 Laravel 中是不是存在记录不起作用

检查 localStorage 是不是可用

MYSQL:检查表是不是存在不起作用

使用 DFS 检查二叉树中是不是存在路径不起作用