406

How can I check if an item is set in localStorage? Currently I am using

if (!(localStorage.getItem("infiniteScrollEnabled") == true || localStorage.getItem("infiniteScrollEnabled") == false)) { // init variable/set default variable for item localStorage.setItem("infiniteScrollEnabled", true); } 
1
  • 2
    seems, you will have a problem without a storage mutex Commented Jul 11, 2013 at 6:37

17 Answers 17

703

The getItem method in the WebStorage specification, explicitly returns null if the item does not exist:

... If the given key does not exist in the list associated with the object then this method must return null. ...

So, you can:

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

See this related question:

Sign up to request clarification or add additional context in comments.

5 Comments

Could you add your own method to localStorage to encapsulate this little test? E.g. localStorage.hasItem("infiniteScrollEnabled")?
@Paul: Yes, you could even augment the Storage.prototype object, but as a rule of thumb I always recommend to not modify objects you don't own, specially host objects.
ooh yeah, good points in there. Coming from a CSS background, the idea that I can fix browser issues myself is exciting, but I can see how mucking around with the browser’s objects could get confusing.
Thanks! However, since the question tries to set a value in Storage to true and checks if it's true, it may be a good idea to mention that keys and values can only be strings, and anything you pass as a value is implicitly converted to a string.
By design this is the correct answer. .getItem() was designed to return null when a key does not exist, and when a key is set to also create a value which can only be of type string.
78

You can use hasOwnProperty method to check this

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

Works in current versions of Chrome(Mac), Firefox(Mac) and Safari.

6 Comments

It should be the accepted answer. The accepted one will consider a stored "null" value as not set, which is wrong.
@FlavienVolken You can not have a stored null value though. You can have "null", but the code there will not misbehave on it, while this one will fail on length key.
@Kaiido you are right, I had this behaviour because I was directly parsing the stored data and as JSON.parse("null") === JSON.parse(null) I had a collision.
Got the following ESLint error: "Do not access Object.prototype method 'hasOwnProperty' from target object.eslint(no-prototype-builtins)"
This won't work if foo is not set on page load and you want to do something with foo. I think that is what the questioner was getting at, you want to check if the key foo exists, not if foo has a value. I have this situation, where a click event triggers .setitem with logic based around getItem,but it won't work until I setItem, and I can't setItem until I know foo's state (value1 or value2). In other words, check foo exits then set it to value1 if it does not without accidentally overwriting value2.
|
23

The shortest way is to use default value, if key is not in storage:

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

Comments

8

there are couple of methods to check i am adding them here

Method 1

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

Method 2

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

Method 3

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

Method 4

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

Comments

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

Or

var secret = localStorage.hash || 42; 

Updated:

let scrollEnabled = localStorage?.scrollEnabled??true; 

1 Comment

JavaScript returns the first non-null or positive value Examples: [ null || "abc" ] will return "abc" [ 2 || 5 ] will return 2 [ 0 || 5 ] will return 5 [ 1 || 5 ] will return 1 etc. Hence the above code works.
5

Can try something like this:

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

Comments

4

You can also try this if you want to check for undefined:

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

getItem is a method which returns null if value is not found.

Comments

3

For TRUE

localStorage.infiniteScrollEnabled = 1; 

FOR FALSE

localStorage.removeItem("infiniteScrollEnabled") 

CHECK EXISTANCE

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

1 Comment

good one, worked in my case
3

How can one test existence of an item in localStorage? this method works in internet explorer.

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

3 Comments

It certainly shouldn't; getItem just returns null for keys that don't exist.
I was having the same issue with IE, and this is the fix for it, ++
You should definitely try | catch when parsing the item.
2

Best and Safest way i can suggest is this,

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

This passes through ESLint's no-prototype-builtins rule.

Comments

1

You should check for the type of the item in the 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? } 

Comments

1

I've used in my project and works perfectly for me

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

Comments

1

I'm late to this party, but checking localStorage for the existence of keys (or the existence of key values) is easily done with localDataStorage, a handy utility wrapper I created.

After instantiating the wrapper with something like

myLDS = localDataStorage( 'segmentedStorageHere' ); 

you can set keys

myLDS.set( 'infiniteScrollEnabled', true ); 

in a straightforward manner. Note that this example is actually passing a boolean value to the store, where it can be retrieved with

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

and scrollingState will contain the boolean value returned. The wrapper keeps track of the native JavaScript data type for you, seamlessly (Array, Boolean, Date, Number, Object, etc.) No more JSON stringifying/parsing in your code.

Now when we need to know if a key is in the store, we can check it like this

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

You can also check whether a particular value is present. For example

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

Comments

1

As @Christian C. Salvadó has mentioned above you can do if (xxx === null){}

but null is also a falsy value, like so:

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

which does not print "hello".

Comments

1

The code

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

is not working for me. Perhaps it's because things have changed since this answer was provided. Today, in 2023, the following command works for me:

if (!localStorage.getItem("infiniteScrollEnabled")) { 

Note that this is actually the method recommended in the MDN web docs at https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#testing_whether_your_storage_has_been_populated.

Comments

0
localStorage['root2']=null; localStorage.getItem("root2") === null //false 

Maybe better to do a scan of the plan ?

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

Comments

0

I always check if localStorage or sessionStorage is set by checking the length of them

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.