sessionStorage未按预期工作

时间:2013-08-19 17:32:46

标签: javascript session-storage

这是我的代码:

    sessionStorage.loggedIn = true;

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

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

2 个答案:

答案 0 :(得分:2)

尝试将代码更改为

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

答案 1 :(得分:1)

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

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

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