如何检查存储项是否已设置?

时间:2010-07-16 07:00:39

标签: javascript html5 local-storage

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

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

16 个答案:

答案 0 :(得分:422)

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

  

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

所以,你可以:

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

请参阅此相关问题:

答案 1 :(得分:24)

您可以使用hasOwnProperty方法检查此

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

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

答案 2 :(得分:17)

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

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

答案 3 :(得分:4)

如果要检查未定义:

,也可以尝试此操作
{{1}}

getItem是一个方法,如果找不到值,则返回null。

答案 4 :(得分:1)

对于TRUE

localStorage.infiniteScrollEnabled = 1;

错误

localStorage.removeItem("infiniteScrollEnabled")

检查存在

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

if(!localStorage.hash) localStorage.hash = "thinkdj";

或者

var secret =  localStorage.hash || 42;

答案 7 :(得分:1)

您应该检查localStorage

中项目的类型
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?
}

答案 8 :(得分:0)

localStorage['root2']=null;

localStorage.getItem("root2") === null //false

也许更好的扫描计划?

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

答案 9 :(得分:0)

我可以建议的最佳和最安全的方式是

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

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

答案 10 :(得分:0)

我已经在我的项目中使用过,并且对我来说很完美

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

答案 11 :(得分:0)

简便的方法是

if(localStorage.test){
console.log("now defined");
}
else{
console.log("undefined");
localStorage.test="defined;"
}

工作原理

第一次调用localStorage.test时,它不包含任何存储到localStorage对象中的存储,因此它返回未定义的其他条件触发器。 在其他条件触发之后,我设置了新变量,然后再次检查它是否包含数据,以便在if条件下返回true的数据

答案 12 :(得分:0)

有几种方法可以检查我在这里添加它们

方法一

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";
 }

答案 13 :(得分:0)

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

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

myLDS = localDataStorage( 'segmentedStorageHere' );

你可以设置键

myLDS.set( 'infiniteScrollEnabled', true );

以一种直截了当的方式。请注意,此示例实际上是将 boolean 值传递给存储,在那里可以使用

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

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

现在当我们需要知道key是否在store中时,我们可以这样检查

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

答案 14 :(得分:0)

可以尝试这样的事情:

import datetime

first_day = datetime.date(2021, 8, 1)

now = datetime.datetime.now()
daysleft = first_day - now.date()

today = datetime.date.today()
daysleft = first_day - today

print(f'{daysleft.days} days')

# ---

import tkinter as tk

root = tk.Tk()
lbl = tk.Label(root, text=f'{daysleft.days} days till {first_day}')
lbl.pack()
root.mainloop()

答案 15 :(得分:-1)

尝试此代码

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

} else {

}