Logical operators are typically used with Boolean (logical) values; when they are, they return a Boolean value. However, the && and || operators actually return the value of one of the specified operands, so if these operators are used with non-Boolean values, they may return a non-Boolean value. The logical operators are described in the following table.
Returns expr1 if it can be converted to false; otherwise, returns expr2. Thus, when used with Boolean values, && returns true if both operands are true; otherwise, returns false.
Returns expr1 if it can be converted to true; otherwise, returns expr2. Thus, when used with Boolean values, || returns true if either operand is true; if both are false, returns false.
Returns false if its single operand that can be converted to true; otherwise, returns true.
Examples of expressions that can be converted to false are those that evaluate to null, 0, NaN, the empty string (""), or undefined.
The following code shows examples of the && (logical AND) operator.
JSCopy to Clipboard
consta1=true&&true;// t && t returns trueconsta2=true&&false;// t && f returns falseconsta3=false&&true;// f && t returns falseconsta4=false&&3===4;// f && f returns falseconsta5="Cat"&&"Dog";// t && t returns Dogconsta6=false&&"Cat";// f && t returns falseconsta7="Cat"&&false;// t && f returns false
The following code shows examples of the || (logical OR) operator.
JSCopy to Clipboard
consto1=true||true;// t || t returns trueconsto2=false||true;// f || t returns trueconsto3=true||false;// t || f returns trueconsto4=false||3===4;// f || f returns falseconsto5="Cat"||"Dog";// t || t returns Catconsto6=false||"Cat";// f || t returns Catconsto7="Cat"||false;// t || f returns Cat
The following code shows examples of the ! (logical NOT) operator.
As logical expressions are evaluated left to right, they are tested for possible "short-circuit" evaluation using the following rules:
false && anything is short-circuit evaluated to false.
true || anything is short-circuit evaluated to true.
The rules of logic guarantee that these evaluations are always correct. Note that the anything part of the above expressions is not evaluated, so any side effects of doing so do not take effect.
Note that for the second case, in modern code you can use the Nullish coalescing operator (??) that works like ||, but it only returns the second expression, when the first one is "nullish", i.e. null or undefined. It is thus the better alternative to provide defaults, when values like '' or 0 are valid values for the first expression, too.