1

这是我的代码:

    sessionStorage.loggedIn = true;

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

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

4

2 回答 2

2

尝试将您的代码更改为

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

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

它应该在所有主要浏览器中始终如一地工作。

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

请注意,JSON.parse未定义/空值并不总是很好,因此首先进行一些类型检查可能是明智的。

您可以在此处阅读存储接口的规范

于 2013-08-19T17:50:38.770 回答
1

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

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

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

于 2013-08-19T17:49:22.670 回答