我使用会话存储来设置可以采用数值或null
的密钥。我注意到无论我放入什么字段都将字段存储为字符串。有没有一种方法可以将我的存储值转换回null
?
例如,我想对我的代码进行检查:
if (!sessionStorage.getItem('key')) {
// do something
}
进行检查的最佳方法是什么? 显而易见的方法是
if (!sessionStorage.getItem('key') !== "null") {
// do something
}
我想知道是否有另类选择。
答案 0 :(得分:4)
你可以解析它
JSON.parse('null') // null
JSON.parse('1') // 1
所以
var val = sessionStorage.getItem('key');
val = JSON.parse(val);
关闭演员
替代方案是:
var val = sessionStorage.getItem('key');
val = val*1 || null;
答案 1 :(得分:2)
在将值写入存储之前,将您的值序列化为JSON。
var json = JSON.stringify(val);
然后再次读出来解析它。
try {
var val = JSON.parse(storage.item);
} catch(ex) {
// handle errors
}
将解析器包装在try块中非常重要。如果用户或浏览器清除了会话存储,那么您将尝试JSON.parse('undefined')
,这会引发错误。
答案 2 :(得分:1)
我只想要一些评价为假的东西
您可以使用空字符串来标记未设置的值:
sessionStorage.setItem('key','');
这样您就可以重复使用当前的支票:
if (!sessionStorage.getItem('key')) {
// do something
}
那就是说,你提到你有一个下拉选择值,这就是你需要这样一个值的原因,但我认为一个涉及删除null值项的解决方案会更好。 Here's a working demo,以及用于制作它的代码:
var dd = document.getElementById('dropdown');
dd.addEventListener('change', function(){
var value = this.value;
if (value === 'null')
sessionStorage.removeItem('key');
else sessionStorage.setItem('key', value);
});
var check = document.getElementById('check');
check.addEventListener('click', function(){
this.innerHTML = 'Value: '+sessionStorage.getItem('key')+
', check: '+(!sessionStorage.getItem('key'));
});
<select id="dropdown">
<option value="null">none</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<button id="check">Check value</button>
答案 3 :(得分:0)
sessionStorage是一个键值数据库,两者都存储为字符串。您可以看到Storage.setItem()和Storage.getItem()的文档说明DOMString
。
这样做的本质是你检索的对象总是字符串。您必须通过应用JSON.parse()
或完全手动方法手动投射它们。没有任何操作就无法取回null
。
已提到的另一种方法是避免在sessionStorage中存储null
值。检查密钥是否存在比在之后正确投射更容易。
答案 4 :(得分:-1)
由于返回的语句是字符串,您可以说if(!sessionStorage.setItem('key','')) {}