In the Chrome console I set foo
to null:
localStorage.setItem("foo",null)
Then I test, whether it is null:
console.log(localStorage.getItem("foo")==null)
prints false
.
Then I test, whether it is the string "null"
:
console.log(localStorage.getItem("foo")=="null")
prints true
.
I thought that null
was a legitimate Javascript value. Storing it as the string "null"
is very counter intuitive and caused a strange bug in an otherwise working program, when I cleared the localStorage in the browser manually.
If the key does not exist, null is returned. localstorage are browser dependent, NodeJs is server side. This difference is that the in operator will walk the prototype chain, but getItem will only return data set on the object itself.
There is no way to set a localStorage item to have a value of null. Use remove instead. Any localStorage item either has a string value, or it does not exist. No other type is possible, therefore no variation of null is possible either.
The getItem() method of the Storage interface, when passed a key name, will return that key's value, or null if the key does not exist, in the given Storage object.
The localStorage is an instance of the Storage type that allows you to store persistent data in the web browsers. The localStorage can store only strings. To store objects, you convert them to strings using the JSON.
Please see https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
All values are stored as strings in local storage. You should stringify data before storing it and parse data after retrieving it:
localStorage.setItem("foo", JSON.stringify(null));
var value = JSON.parse(localStorage.getItem("foo"));
console.log(value === null);
As per spec, localstorage
uses Storage object interface
interface Storage {
readonly attribute unsigned long length;
DOMString? key(unsigned long index);
getter DOMString? getItem(DOMString key);
setter void setItem(DOMString key, DOMString value); //notice this line
deleter void removeItem(DOMString key);
void clear();
};
setter method translates to setItem
, accepts only DOMString
As per documentation
DOMString is a UTF-16 String. As JavaScript already uses such strings, DOMString is mapped directly to a String.
Passing null to a method or parameter accepting a DOMString typically stringifies to "null".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With