Shane Gannon
Shane Gannon

Reputation: 7718

Why is if (undefined) evaluating to true?

I'm new to JavaScript and have hit what seems to be an obvious issue.

const item = sessionStorage.getItem('item'); // undefined
if (item) {
    return item;
}

In the Chrome debugger I can see that item is coming back as undefined. I would expect the conditional to fail. To my surprise it's evaluating to true.

I thought I'd already tested this out. Why would it be coming back as true in the conditional?

I've come across other checks such as those recommended by How to check for "undefined" in JavaScript?. But... why do I have to do anything even remotely 'complex' for a simple check like this? The above approach seems so simple and elegant I'm reluctant to lose it.

I'm also seeing this approach in an example on https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage.

Upvotes: 4

Views: 1030

Answers (1)

Paul
Paul

Reputation: 141829

You're not getting the value undefined from sessionStorage, but the string "undefined", which is truthy just like any other non-empty string.

I know you're not getting the value undefined because that is impossible. sessionStorage.getItem can only return a string or null. Also note that setItem will coerce its argument to a string, so sessionStorage.setItem('item', undefined) sets item to the string "undefined".

If you want to remove an item you should use sessionStorage.removeItem('item'); instead of setting it to undefined.

Upvotes: 13

Related Questions