Javascript 会话存储不是';他没有按预期工作

Javascript 会话存储不是';他没有按预期工作,javascript,session-storage,Javascript,Session Storage,这是我的密码: sessionStorage.loggedIn = true; if (sessionStorage.loggedIn) { alert('true'); } else { alert('false'); } 很简单。关于JavaScript是如何计算这些表达式的,肯定有一些小事情我不理解。当我输入sessionStorage.loggedIn=false时,“false”警报正确显示。但是,当我将ses

这是我的密码:

    sessionStorage.loggedIn = true;

    if (sessionStorage.loggedIn) {
        alert('true');
    }
    else {
        alert('false');
    }

很简单。关于JavaScript是如何计算这些表达式的,肯定有一些小事情我不理解。当我输入sessionStorage.loggedIn=false时,“false”警报正确显示。但是,当我将
sessionStorage.loggedIn
更改为true时,即使在清除会话后,“false”警报仍然会弹出。这个表达有什么不对的地方?这看起来很简单,也许我需要另一双眼睛

WebStorage对象(sessionStorage)中的键和值必须是字符串。如果它们不是字符串,则在分配给sessionStorage时,应在浏览器的实现中将它们“转换”为字符串。如果您根据“true”进行求值或将其转换为布尔值,则效果良好


尝试将代码更改为

sessionStorage.setItem('loggedIn',JSON.stringify(true));

if (JSON.parse(sessionStorage.getItem('loggedIn'))) {
    alert('true');
}
else {
    alert('false');
}
而且它应该在所有主要浏览器中都能稳定工作

setItem
/
getItem
方法的接口是规范的编写方式,因此这样做比使用指定属性的快捷方式更安全。另外,
sessionStorage
,就像
localStorage
一样,是一种基于文本的存储机制,并不用于存储对象,因此您需要使用
JSON.parse
JSON.stringify
包装调用,以获得全面的预期结果

请注意,
JSON.parse
对于未定义的/null值并不总是很好,因此最好先进行一些类型检查


您的代码完全符合您在Firefox中的期望。你用的是什么浏览器?编辑Chrome也可以。由于我不完全确定何时将true赋值给sessionStorage.loggedIn,它会变成一个字符串。这可能是你遇到的问题。可能是重复的感谢,我喜欢回答问题,也教你最佳实践!谢谢我知道有一些奇怪的浏览器相关的东西我没有通过谷歌搜索找到。