# JavaScript Logical Operators

> Learn the JavaScript logical operators and (&&), or (||), and not (!), including short-circuit evaluation for guarding access and setting default values.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2019-06-10 | Topics: [JavaScript](https://flaviocopes.com/tags/js/) | Canonical: https://flaviocopes.com/javascript-logical-operators/

[JavaScript](https://flaviocopes.com/javascript/) provides us 3 logical operators: **and**, **or** and **not**.

## Logical and

Returns true if both operands are true:

```js
<expression> && <expression>
```

For example:

```js
a === true && b > 3
```

The cool thing about this operator is that the second expression is never executed if the first evaluates to false. Which has some practical applications, for example, to check if an object is defined before using it:

```js
const car = { color: 'green' }
const color = car && car.color
```

## Logical or

Returns true if at least one of the operands is true:

```js
<expression> || <expression>
```

For example:

```js
a === true || b > 3
```

This operator is very useful to fallback to a default value. For example:

```js
const car = {}
const color = car.color || 'green'
```

makes `color` default to `green` if `car.color` is not defined.

## Logical not (!)

Invert the value of a boolean:

```js
let value = true
!value //false
```
