Jonas Lu
Jonas Lu

Reputation: 181

if statement with javascript condition operator

just have 2 question regarding JS conditional operator, is the below 2 expression valid?

1.

if(isUser && isUser === true || isGuest && isGuest === true){
     //...
   }

I am wondering do I have to add () to make it like and still have the same functioning:

if((isUser && isUser === true) || (isGuest && isGuest === true)){
     //...
   }
const items = list.orderList && list.orderList.isUser === true || list.orderList.isGuest ? list.items : [];

I am wondering do I have to add () to make it like and functioning the same as above conditional operator:

const items = list.orderList && (list.orderList.isUser === true || list.orderList.isGuest === true) ? list.items : [];

Upvotes: 1

Views: 51

Answers (1)

futur
futur

Reputation: 1853

As per Operator Precedence in the MDN docs, logical AND takes precedence over logical OR. Therefore,

expression1 || expression2 && expression3

will evaluate to

expression1 || (expression2 && expression3)

Therefore,

isUser && isUser === true || isGuest && isGuest === true

naturally evaluates to

(isUser && isUser === true) || (isGuest && isGuest === true)

anyway, so you do not need parentheses..

But since, in your second example, you want to evaluate OR then AND, you do need parentheses for it to evaluate the way you require, as

list.orderList && list.orderList.isUser === true || list.orderList.isGuest

will evaluate to

(list.orderList && list.orderList.isUser === true) || list.orderList.isGuest

Upvotes: 3

Related Questions