检查 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 项目是不是存在不起作用的主要内容,如果未能解决你的问题,请参考以下文章