在 javascript 中将 "null" 转换为 null

Cast "null" as null in javascript

我使用会话存储来设置一个可以取数值或null的键。我注意到无论我输入什么,该字段都存储为字符串。有没有一种很好的方法可以将我的存储值转换回 null

例如,我想检查我的代码:

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

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

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

我想知道是否有其他选择。

你可以解析它

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;

sessionStorage 是一个键值数据库,两者都以字符串形式存储。您可以看到 Storage.setItem() and Storage.getItem().

的文档说明 DOMString

这样做的本质是您检索的对象将始终是字符串。您将必须通过应用 JSON.parse() 或完全手动的方法手动投射它们。 null 不进行任何操作是无法取回的。

已提到的另一种方法是简单地避免在 sessionStorage 中存储 null 值。检查密钥是否存在比事后正确转换更容易。

由于返回的语句是字符串形式,您可以说 if(!sessionStorage.setItem('key','')) {}

在写入存储之前将您的值序列化为 JSON。

var json = JSON.stringify(val);

再读出来再解析

try {
  var val = JSON.parse(storage.item);
} catch(ex) {
  // handle errors
}

将解析器包装在 try 块中很重要。如果用户或浏览器清除会话存储,那么您将尝试 JSON.parse('undefined') 这将引发错误。

I just want something that would evaluate to false

您可以使用空字符串来标记未设置的值:

sessionStorage.setItem('key','');

这样您就可以重新使用当前的支票:

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

就是说,您提到您有一个下降到 select 个值,这就是您需要这样一个值的原因,但我认为涉及删除 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>