कैसे जांचें कि क्या स्टोरेज आइटम सेट है?


288

यदि कोई आइटम सेट है तो मैं कैसे जांच सकता हूं localStorage? वर्तमान में मैं उपयोग कर रहा हूं

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

2
लगता है, आपको स्टोरेज म्यूटेक्स के बिना एक समस्या होगी
4esn0k

जवाबों:


509

getItemWebStorage विनिर्देश में विधि, स्पष्ट रूप से देता है nullयदि आइटम मौजूद नहीं है:

... यदि दी गई कुंजी वस्तु से जुड़ी सूची में मौजूद नहीं है, तो इस विधि को शून्य होना चाहिए। ...

तो तुम कर सकते हो:

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

इससे संबंधित प्रश्न देखें:


1
क्या आप localStorageइस छोटी सी परीक्षा को अंजाम देने के लिए अपनी खुद की विधि जोड़ सकते हैं ? जैसे localStorage.hasItem("infiniteScrollEnabled")?
पॉल डी। वेट

4
@Paul: हां, आप Storage.prototypeऑब्जेक्ट को बढ़ा भी सकते हैं , लेकिन अंगूठे के एक नियम के रूप में, मैं हमेशा उन वस्तुओं को संशोधित नहीं करने की सलाह देता हूं जो आपके पास नहीं हैं , विशेष रूप से होस्ट ऑब्जेक्ट।
CMS

ऊह हाँ, वहाँ में अच्छे अंक। CSS बैकग्राउंड से आने पर, यह विचार कि मैं ब्राउज़र की समस्याओं को स्वयं ठीक कर सकता हूं, रोमांचक है, लेकिन मैं देख सकता हूं कि ब्राउज़र की वस्तुओं के साथ घूमना कैसे दूभर हो सकता है।
पॉल डी। वेट

5
नोट गलत है - Storageइंटरफ़ेस का वर्तमान संस्करण विशेष रूप से कहता है कि मान प्रकार के हैं DOMStringw3.org/TR/webstorage/#the-storage-interface
Alnitak

1
नोट निकाला गया। धन्यवाद @TimothyZorn और Alnitak
सीएमएस

46

hasOwnPropertyइसे जांचने के लिए आप विधि का उपयोग कर सकते हैं

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

क्रोम (मैक), फ़ायरफ़ॉक्स (मैक) और सफारी के वर्तमान संस्करणों में काम करता है।


2
यह स्वीकृत उत्तर होना चाहिए। स्वीकृत एक संग्रहीत "अशक्त" मान को सेट नहीं के रूप में माना जाएगा, जो गलत है।
फ़्लेवियन वोलकेन

9
@FlavienVolken आपके पास एक संग्रहीत nullमान नहीं हो सकता है । आपके पास हो सकता है "null", लेकिन वहां का कोड उस पर दुर्व्यवहार नहीं करेगा, जबकि यह एक lengthकुंजी पर विफल हो जाएगा ।
काइदो

1
@ कैइडो आप सही हैं, मेरा यह व्यवहार था क्योंकि मैं सीधे संग्रहीत डेटा को पार्स कर JSON.parse("null") === JSON.parse(null)रहा था और जैसा कि मेरी टक्कर थी।
फ़्लावियन वोल्केन

3
निम्नलिखित ESLint त्रुटि मिली: "लक्ष्य ऑब्जेक्ट से ऑब्जेक्ट का उपयोग न करें। प्रोटोटाइप विधि 'hasOwnProperty'। ऑब्जेक्ट लिंक (नो-प्रोटोटाइप-
बिल्डिन्स

यह काम नहीं करेगा अगर फू पेज लोड पर सेट नहीं है और आप फू के साथ कुछ करना चाहते हैं। मुझे लगता है कि प्रश्नकर्ता को क्या मिल रहा था, आप जांचना चाहते हैं कि क्या कुंजी fooमौजूद है, न कि अगर फू का कोई मूल्य है। मेरे पास यह स्थिति है, जहां एक क्लिक ईवेंट .setitemgetItem के आसपास तर्क के साथ ट्रिगर होता है, लेकिन यह तब तक काम नहीं करेगा जब तक मैं इसे सेट नहीं करता, और जब तक मैं फू की स्थिति (value1 या value2) नहीं जानता, तब तक मैं इसे सेट नहीं कर सकता। दूसरे शब्दों में, चेक फू एक्सिट्स तब इसे वैल्यू 1 पर सेट करें यदि यह गलती से बिना राइटिंग वैल्यू 2 के ओवरराइड नहीं करता है।
रिन और लेन

22

सबसे छोटा तरीका डिफ़ॉल्ट मान का उपयोग करना है, यदि कुंजी भंडारण में नहीं है:

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

4

यदि आप अपरिभाषित के लिए जाँच करना चाहते हैं तो आप यह भी आज़मा सकते हैं:

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

getItem एक ऐसा तरीका है जो मान नहीं मिलने पर अशक्त हो जाता है।


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

या

var secret =  localStorage.hash || 42;

जावास्क्रिप्ट पहला गैर-अशक्त या सकारात्मक मूल्य देता है उदाहरण: [null || "abc"] "abc" लौटाएगा [2 || ५] वापसी होगी २ [० || ५] वापसी होगी ५ [१ || ५] १ इत्यादि वापस कर देगा इसलिए उपरोक्त कोड काम करता है।
दीपक थॉमस

2

सच के लिए

localStorage.infiniteScrollEnabled = 1;

FALSE के लिए

localStorage.removeItem("infiniteScrollEnabled")

चेक परीक्षा

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

1

आपको स्थानीयस्टोरेज में आइटम के प्रकार की जांच करनी चाहिए

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?
}

1

किसी वस्तु के अस्तित्व का परीक्षण कैसे किया जा सकता है localStorage? यह विधि इंटरनेट एक्सप्लोरर में काम करती है।

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

2
यह निश्चित रूप से नहीं होना चाहिए; getItem केवल उन कुंजियों के लिए शून्य देता है जो मौजूद नहीं हैं।
एरिकलॉ

मैं IE के साथ एक ही मुद्दा था, और यह इसके लिए तय है, ++
edencorbin

try | catchआइटम को पार्स करते समय आपको निश्चित रूप से होना चाहिए ।
अब्दुल सादिक यालसिन

0
localStorage['root2']=null;

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

शायद योजना का एक स्कैन करने के लिए बेहतर है?

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

0

सबसे अच्छा और सबसे सुरक्षित तरीका मैं यह सुझा सकता हूं,

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

यह ESLint के no-prototype-builtinsनियम से होकर गुजरता है ।


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
}

0

आसान तरीका है

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

यह काम किस प्रकार करता है

जब आप पहली बार localStorage.test को कॉल करते हैं, तो इसमें लोकलस्टोरेज ऑब्जेक्ट में कोई स्टोर नहीं होता है, इसलिए यह अपरिभाषित होता है और शर्त ट्रिगर होती है। इसके बाद मैंने नया वेरिएबल सेट किया और फिर से जांचा कि इसमें डेटा है या नहीं, अगर यह सही स्थिति में डेटा के साथ लौटा


-2

इस कोड को आज़माएं

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

} else {

}

करो या न करो। कोशिश से काम नहीं चलेगा"। एक अच्छे उत्तर में हमेशा एक स्पष्टीकरण होगा कि क्या किया गया था और यह इस तरह से क्यों किया गया था, न केवल ओपी के लिए बल्कि भविष्य के आगंतुकों के लिए एसओ।
Jay Blanchard
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.