ChatGPT解决这个技术问题 Extra ChatGPT

如何查看是否设置了Storage item?

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

if (!(localStorage.getItem("infiniteScrollEnabled") == true || localStorage.getItem("infiniteScrollEnabled") == false)) {
    // init variable/set default variable for item
    localStorage.setItem("infiniteScrollEnabled", true);
}
看来,如果没有存储互斥锁,您将遇到问题

C
Community

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

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

这样你就可以:

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

请参阅此相关问题:

在 HTML5 localStorage 中存储对象


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

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

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

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


它应该是公认的答案。被接受的将认为存储的“空”值未设置,这是错误的。
@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。
V
Vladislav

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

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

D
Deepak Thomas
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 等。因此上面的代码有效。
V
Vikas Kandari

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

方法一

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

P
Prime_Coder

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

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

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


A
Ayush Choudhary

可以尝试这样的事情:

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

D
Derin

为真

localStorage.infiniteScrollEnabled = 1;

为假

localStorage.removeItem("infiniteScrollEnabled")

检查存在

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

C
Cursor

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

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

它当然不应该; getItem 只为不存在的键返回 null。
我在 IE 上遇到了同样的问题,这就是它的修复方法,++
解析项目时绝对应该try | catch
w
webmaster

您应该检查 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?
}

G
Gaurav Gandhi

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

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

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


R
Rahul Vanave

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

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

M
Mac

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

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

myLDS = localDataStorage( 'segmentedStorageHere' );

你可以设置键

myLDS.set( 'infiniteScrollEnabled', true );

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

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

h
heyyy

正如@Christian C. Salvadó 上面提到的,您可以这样做if (xxx === null){}

但 null 也是一个虚假值,如下所示:

if (null){
console.log ("hello");
}

不打印“你好”。


z
zloctb
localStorage['root2']=null;

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

也许更好地扫描计划?

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

M
Mohamed Eldefrawy

我总是通过检查它们的长度来检查是否设置了 localStorage 或 sessionStorage

if (sessionStorage.length > 0) {
  console.log("exists")
} else {
  console.log("not exists")
}



M
Moayad .AlMoghrabi

试试这个代码

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

} else {

}

做或不做。没有“尝试”。一个好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅对 OP,而且对未来的 SO 访问者。