Categories

# JavaScript Tip – Invert Logical Expressions With De Morgan’s Laws

Just something I want to keep around for reference. Ignore if you don’t program. – matte

Reprinted from SitePoint Community Crier #71. Without permission but credit is given. 🙂

A JavaScript expression will sometimes be more intuitive (and easier to understand) when written a certain way, but, often, we may actually need the inverse of that expression. For example, in Listing 1 below, our code only needs to react if (x && y) is false. We need to invert the expression.

Listing 1

```if (x && y) { // we don't have anything to do here } else { // we want to do something here }```

De Morgan’s laws describe how to invert a logical expression. In Listing 2, we see De Morgan’s Laws in action within the JavaScript syntax.

Listing 2

```!(x || y) == (!x && !y) !(x && y) == (!x || !y)```

The rule inverts each logical term and each logical operator.

In Listing 3, we invert the expression from Listing 1 by applying De Morgan’s Laws.

Listing 3

```if (!x || !y) { // we want to do something here }```

Sometimes, a logical term is more complex than a simple boolean variable. A logical term may be a relational expression, such as (p <>= q)
Inverting the next logical term (r != s) we get (r == s)
Inverting the logical operator && we get ||
The result is shown in Listing 5.

Listing 5

```if (p >= q || r == s) { // we want to do something here }```

So, if you find yourself struggling with a JavaScript problem, pick up an old math textbook — your solution is probably in there.

Visit us at the SitePoint JavaScript Forum if you have any questions.

Keep it fun 🙂

Mike Foster – Programming Team Mentor