检查localStorage项是否存在无效

时间:2017-09-06 15:57:22

标签: javascript local-storage

我一直在搜索这几个小时仍然没有解决我的问题:无法检查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);

解析时我收到错误:

  

Uncaught SyntaxError:位置1的JSON中出现意外的标记o       在JSON.parse(<anonymous>

我在localStor中设置localStorage项的第一个地方仅在注册后,它位于仅在单击按钮HTML元素时调用的函数内。但从逻辑上讲,它不应该从第一个地方输入else

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

2 个答案:

答案 0 :(得分:2)

localStorage存储之前,您似乎忘了序列化对象,需要使用

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

然后这应该按预期工作。

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

localStorage.clear()

答案 1 :(得分:-1)

在将对象放入本地存储之前,您需要使用JSON.stringify序列化对象。

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

如果localStorage.getItem未返回null,则您请求的密钥位于localStorage中。它的回报价值不在于。事实仍然是你从getter获取了一个非序列化对象,所以你需要弄清楚该对象被错误地放入localStorage的位置。