【问题标题】:Cast "null" as null in javascript在javascript中将“null”转换为null
【发布时间】:2016-06-25 22:57:13
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 为什么不直接使用sessionStorage.removeItem('key') 而不是sessionStorage.setItem('key','null')?
  • 对于我的用例,它更容易管理。我有一个下拉菜单来更改设置key 的值。它绑定到事件侦听器,因此在一种情况下执行删除和在所有其他情况下设置值 no 会很奇怪?
  • localStorage 仅存储字符串,它没有 JavaScript 类型的概念,因此您实际上应该检查特定字符串,无论是 null、not set、0 还是您选择的任何字符串,或者只是删除该项目并检查它是否未设置。

标签: javascript local-storage sessionstorage


【解决方案1】:

你可以解析它

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;

【讨论】:

  • 在这两种情况下都可以,但是如果值是字符串怎么办? JSON.parse("Hello"); 不起作用。
  • @OptimusCrime 他存储了numbers 或null 这就是所描述的
  • 明白了。我错过了那部分。猜猜这是一个不错的、有效的、黑客攻击。
  • JSON 解析对此太过分了。
【解决方案2】:

sessionStorage 是一个键值对数据库,两者都存储为字符串。您可以查看为 Storage.setItem() 和 Storage.getItem() 声明 DOMString 的文档。

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

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

【讨论】:

  • 好吧显然我期待做一个手术。看来 JSON.parse 是要走的路。实际上,就我而言,我只是想要一些评估为假的东西。
  • 技术上,你也可以eval它。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    var json = JSON.stringify(val);
    

    然后在你再次读出时解析它。

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

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

    【讨论】:

      【解决方案5】:

      我只是想要一些评估为假的东西

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

      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>
      

      【讨论】:

        猜你喜欢
        • 2017-01-10
        • 2012-04-14
        • 1970-01-01
        • 2021-10-30
        • 2015-07-07
        • 2013-09-25
        • 2016-10-30
        • 2018-06-20
        • 2012-03-21
        相关资源
        最近更新 更多