在javascript中将“null”转换为null

时间:2016-03-10 21:28:07

标签: javascript local-storage sessionstorage

我使用会话存储来设置可以采用数值或null的密钥。我注意到无论我放入什么字段都将字段存储为字符串。有没有一种方法可以将我的存储值转换回null

例如,我想对我的代码进行检查:

if (!sessionStorage.getItem('key')) {
   // do something
}

进行检查的最佳方法是什么? 显而易见的方法是

 if (!sessionStorage.getItem('key') !== "null") {
       // do something
 }

我想知道是否有另类选择。

5 个答案:

答案 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','')) {}