DEV Community

Discussion on: 😲🤯The most outstanding new feature in Javascript you need to know about: Optional Chaining

Collapse
 
lampewebdev profile image
Michael "lampe" Lazarski

Good question!
Example time!

const user = {
    auth: {
        isLoggedIn: false
    }
}

const isLoggedIn = user.auth?.isLoggedIn || true
// isLoggedIn would be true!

const isLoggedIn = user.auth?.isLoggedIn ?? true
// isLoggedIn would be false!

As you can see there is a difference in how they work.
The problem with || is that it will return the right value when the left value is falsy. The ?? just checks for null or undefined.

Collapse
 
joshsanger profile image
Joshua Sanger

Could also consider converting to a true/false value with:

const isLoggedIn = !!(user.auth?.isLoggedIn)
Thread Thread
 
thecodingalpaca profile image
Carlos Trapet

@joshua I was literally going to say the same thing.
I fail to see the point/usefulness of the '??' operator

Thread Thread
 
lampewebdev profile image
Michael "lampe" Lazarski

There are always alternatives if you can also write

if(user.auth?.isLoggedIn === true){
    // user is logged in!
}

Nobody is forcing anybody to use the ?? operator but I think it just fits nicely together with the ?. and makes the intent clear if the developer knows how both of them work.