我检查sessionStorage Variable是否为null,如果为true,则使用“BAR”初始化它。否则,应该出现一个带有变量值的控制台消息。
sessionStorage.setItem("Foo", null); //I know this would make no sense at this part, this is just here for demo.
if (sessionStorage.getItem("Foo") == null) {
sessionStorage.setItem("Foo", "BAR");
} else {
console.log("Foo != null (proof = '", sessionStorage.getItem("Foo"), "')");
}
然而,它总是转到else语句,我得到控制台消息告诉我变量是“null”,但如果它真的是“null”那么为什么它没有用“BAR”初始化?< / p>
答案 0 :(得分:10)
根据您的编辑,setItem
要求传入的值为字符串(确切地说DOMString
),其他任何内容都将被强制转换为字符串。
在您的情况下,您传递null
,其被强制转移到"null"
。当您致电getItem
时,您会收到一个字符串,这不是null
,因此您的代码会落入else
块。
如果您确实要从存储中清除某个项目,请使用正确的方法removeItem
:
sessionStorage.removeItem("Foo");
现在调用getItem
会导致返回值null
,而不是"null"
。
答案 1 :(得分:1)
HTML5存储:sessionStorage或localStorage接受字符串。如果未传递字符串值,则会将其转换为字符串并保存。因此我们应该使用(JSON.stringify(value))将值转换为字符串,并且在获取之后我们应该再次将其转换为原始值。
var val = null;
//save to storage
sessionStorage.setItem('a',JSON.stringify(val));
//fetch from storage
var stringValue = sessionStorage.getItem('a'); //outputs "null"
var originalValue = JSON.parse(sessionStorage.getItem('a')); //outputs null