【问题标题】:How to check whether a Storage item is set?如何查看是否设置了Storage item?
【发布时间】:2011-03-16 19:28:13
【问题描述】:

如何检查localStorage中是否设置了项目?目前我正在使用

if (!(localStorage.getItem("infiniteScrollEnabled") == true || localStorage.getItem("infiniteScrollEnabled") == false)) {
    // init variable/set default variable for item
    localStorage.setItem("infiniteScrollEnabled", true);
}

【问题讨论】:

  • 看来,没有存储互斥锁会出问题

标签: javascript html local-storage


【解决方案1】:

可以试试这样的:

 let x = localStorage.getItem('infiniteScrollEnabled') === null ? "not found" : localStorage.getItem('infiniteScrollEnabled')

【讨论】:

    【解决方案2】:

    我参加这个聚会迟到了,但是使用 localDataStorage(我创建的一个方便的实用程序包装器)可以轻松地检查 localStorage 是否存在键(或键值是否存在)。

    在用类似的东西实例化包装器之后

    myLDS = localDataStorage( 'segmentedStorageHere' );
    

    你可以设置键

    myLDS.set( 'infiniteScrollEnabled', true );
    

    以直截了当的方式。请注意,此示例实际上是将 boolean 值传递给商店,可以在其中检索它

    let scrollingState = myLDS.get( 'infiniteScrollEnabled' );
    

    scrollingState 将包含返回的布尔值。包装器会为您无缝跟踪原生 JavaScript 数据类型(数组、布尔值、日期、数字、对象等)。您的代码中不再需要 JSON 字符串化/解析。

    现在,当我们需要知道密钥是否在商店中时,我们可以像这样检查它

    if( myLDS.haskey( 'infiniteScrollEnabled' ) ) {
        console.log( "It's been set!" ); 
    } else {
        console.log( "The key is not set." ); 
    }
    

    您还可以检查是否存在特定值。例如

    myLDS.set( 'myNumber', 1234.5678 );
    console.log( myLDS.hasval( 1234.5678 ) );    --> true
    

    【讨论】:

      【解决方案3】:

      有几种方法可以检查我是否在此处添加它们

      方法一

      if("infiniteScrollEnabled" in localStorage){
           console.log("Item exists in localstorage");
      }else{
          console.log("Item does not exist in localstoarge";
      }
      

      方法二

      if(localStorage.getItem("infiniteScrollEnabled") === null){
          console.log("Item does not exist in localstoarge";
      }else{
         console.log("Item exists in localstorage");
      }
      

      方法三

      if(typeof localStorage["cart"] === "undefined"){
          console.log("Item does not exist in localstoarge";
      }else{
         console.log("Item exists in localstorage");
      }
      

      方法四

      if(localStorage.hasOwnProperty("infiniteScrollEnabled")){
           console.log("Item exists in localstorage");
       }else{
          console.log("Item does not exist in localstoarge";
       }
      

      【讨论】:

        【解决方案4】:

        试试这个代码

        if (localStorage.getItem("infiniteScrollEnabled") === null) {
        
        } else {
        
        }
        

        【讨论】:

        • 做或不做。没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
        【解决方案5】:

        我已经在我的项目中使用过并且非常适合我

        var returnObjName= JSON.parse(localStorage.getItem('ObjName'));
        if(returnObjName && Object.keys(returnObjName).length > 0){
           //Exist data in local storage
        }else{
          //Non Exist data block
        }
        

        【讨论】:

          【解决方案6】:

          我能建议的最好和最安全的方法是,

          if(Object.prototype.hasOwnProperty.call(localStorage, 'infiniteScrollEnabled')){
              // init variable/set default variable for item
              localStorage.setItem("infiniteScrollEnabled", true);
          }
          

          这通过 ESLint 的 no-prototype-builtins 规则。

          【讨论】:

            【解决方案7】:

            如何测试localStorage 中某项的存在? 此方法适用于 Internet Explorer。

            <script>
                try{
                    localStorage.getItem("username");
                }catch(e){
                    alert("we are in catch "+e.print);
                }
            </script>
            

            【讨论】:

            • 当然不应该; getItem 只为不存在的键返回 null。
            • 我在 IE 上遇到了同样的问题,这就是它的修复方法,++
            • 解析项目时一定要try | catch
            【解决方案8】:

            您应该检查本地存储中项目的类型

            if(localStorage.token !== null) {
               // this will only work if the token is set in the localStorage
            }
            
            if(typeof localStorage.token !== 'undefined') {
              // do something with token
            }
            
            if(typeof localStorage.token === 'undefined') {
              // token doesn't exist in the localStorage, maybe set it?
            }
            

            【讨论】:

              【解决方案9】:

              WebStorage 规范中的getItem 方法,如果该项不存在,则显式返回null

              ... 如果给定的键在与对象关联的列表中不存在,则此方法必须返回 null。 ...

              所以,你可以:

              if (localStorage.getItem("infiniteScrollEnabled") === null) {
                //...
              }
              

              查看这个相关问题:

              【讨论】:

              • 你可以在localStorage 中添加你自己的方法来封装这个小测试吗?例如。 localStorage.hasItem("infiniteScrollEnabled")?
              • @Paul:是的,你甚至可以扩充Storage.prototype 对象,但根据经验,我总是推荐not modify objects you don't own,特别是宿主对象。
              • 哦,是的,那里有好点。来自 CSS 的背景,我可以自己解决浏览器问题的想法令人兴奋,但我可以看到处理浏览器的对象是多么令人困惑。
              • 注释不正确-Storage 接口的当前版本明确表示值的类型为DOMStringw3.org/TR/webstorage/#the-storage-interface
              • 注释已删除。谢谢@TimothyZorn 和 Alnitak
              【解决方案10】:

              你可以使用hasOwnProperty方法来检查这个

              > localStorage.setItem('foo', 123)
              undefined
              > localStorage.hasOwnProperty('foo')
              true
              > localStorage.hasOwnProperty('bar')
              false
              

              适用于当前版本的 Chrome(Mac)、Firefox(Mac) 和 Safari。

              【讨论】:

              • 这应该是公认的答案。接受的会认为存储的“null”值未设置,这是错误的。
              • @FlavienVolken 您不能存储null 值。您可以拥有"null",但那里的代码不会出现错误,而这个代码会在length 键上失败。
              • @Kaiido 你是对的,我有这种行为是因为我直接解析存储的数据,而JSON.parse("null") === JSON.parse(null) 我发生了冲突。
              • 得到以下 ESLint 错误:“不要从目标 object.eslint(no-prototype-builtins) 访问 Object.prototype 方法 'hasOwnProperty'”
              • 如果页面加载时没有设置 foo 并且你想用 foo 做一些事情,这将不起作用。我认为这就是提问者的意思,你想检查键 foo 是否存在,而不是 foo 是否有值。我有这种情况,点击事件触发.setitem,其逻辑基于getItem,但在我setItem之前它不会起作用,并且在我知道foo的状态(value1或value2)之前我不能setItem。换句话说,检查 foo 退出然后将其设置为 value1,如果没有意外覆盖 value2。
              【解决方案11】:
              if(!localStorage.hash) localStorage.hash = "thinkdj";
              

              或者

              var secret =  localStorage.hash || 42;
              

              【讨论】:

              • JavaScript 返回第一个非 null 或正值示例:[ null || "abc" ] 将返回 "abc" [ 2 || 5 ] 将返回 2 [ 0 || 5 ] 将返回 5 [ 1 || 5 ] 将返回 1 等。因此上面的代码有效。
              【解决方案12】:

              如果你想检查未定义,你也可以试试这个:

              if (localStorage.user === undefined) {
                  localStorage.user = "username";
              }
              

              getItem 是一个在找不到值时返回 null 的方法。

              【讨论】:

                【解决方案13】:

                为真

                localStorage.infiniteScrollEnabled = 1;
                

                假的

                localStorage.removeItem("infiniteScrollEnabled")
                

                检查存在

                if (localStorage[""infiniteScrollEnabled""]) {
                  //CODE IF ENABLED
                }
                

                【讨论】:

                  【解决方案14】:
                  localStorage['root2']=null;
                  
                  localStorage.getItem("root2") === null //false
                  

                  也许更好地扫描计划?

                  localStorage['root1']=187;
                  187
                  'root1' in localStorage
                  true
                  

                  【讨论】:

                    【解决方案15】:

                    如果key不在存储中,最短的方法是使用默认值:

                    var sValue = localStorage['my.token'] || ''; /* for strings */
                    var iValue = localStorage['my.token'] || 0; /* for integers */
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2016-12-05
                      • 1970-01-01
                      • 2013-10-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-03-20
                      • 1970-01-01
                      相关资源
                      最近更新 更多