【问题标题】:sessionStorage isn't working as expectedsessionStorage 未按预期工作
【发布时间】:2013-08-19 17:32:46
【问题描述】:

这是我的代码:

    sessionStorage.loggedIn = true;

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

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

【问题讨论】:

  • 您的代码完全符合您在 Firefox 中的预期。你使用的是什么浏览器? edit Chrome 也可以。
  • 由于我不完全确定何时将 true 分配给 sessionStorage.loggedIn 它变成了一个字符串。这可能是您遇到的问题。

标签: javascript session-storage


【解决方案1】:

尝试将您的代码更改为

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

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

并且它应该在所有主要浏览器中都能一致地工作。

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

请注意,JSON.parse 并不总是能很好地处理未定义/空值,因此最好先进行一些类型检查。

You can read the spec for the storage interface here

【讨论】:

  • 谢谢你,我喜欢在回答问题时教你最佳实践!
  • 谢谢!我知道有一些奇怪的浏览器相关的东西我在谷歌上没有找到。
【解决方案2】:

WebStorage 对象 (sessionStorage) 中的键和值必须是字符串。如果它们不是字符串,则当您分配给 sessionStorage 时,它​​们“应该”在浏览器的实现中转换为字符串。如果您根据“true”评估或转换为布尔值,它将正常工作。

https://code.google.com/p/sessionstorage/

http://www.w3schools.com/html/html5_webstorage.asp

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 2022-01-24
    • 2015-05-11
    • 2020-05-15
    • 2014-10-31
    • 2018-02-12
    • 2014-01-20
    • 2015-01-13
    • 2013-08-01
    相关资源
    最近更新 更多