这是我的代码:
sessionStorage.loggedIn = true;
if (sessionStorage.loggedIn) {
alert('true');
}
else {
alert('false');
}
足够简单。必须有一些小事我不了解JavaScript如何评估这些表达式。当我放sessionStorage.loggedIn = false
时,“错误”警报会正确显示。但是,当我将sessionStorage.loggedIn
更改为true时,即使清除会话后,“false”警报仍会弹出。我对这个表达的态度是什么?看起来很简单,也许我只需要另外一双眼睛。
答案 0 :(得分:2)
尝试将代码更改为
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
并不总是与未定义/空值一致,所以最好先进行一些类型检查。
答案 1 :(得分:1)
WebStorage对象(sessionStorage)中的键和值必须是字符串。如果它们不是字符串,则在分配给sessionStorage时,它们“应该”在浏览器的实现中转换为字符串。如果您评估“true”或转换为布尔值,它将正常工作。