Q&A

# Explaining the result of an arithmetic expression in JavaScript

+1
−4

I misunderstand why the following code outputs -1 in console.

``````x = 42;
x = (x == 42) * -1 + (x != 42) * x;
``````

-1

Due to Type Coercion, the comparison of x to 42 yields `true` and is thus translated to `1`.

So `1 * -1` yields `-1`.

Now, `(x != 42)` which is `false` yields `0` so I have expected to get in console

-42

Because `-1 + 0 * 42 MEANS -42`.

So why did I get `-1` in the end?

Why does this post require moderator attention?
Why should this post be closed?

1 + 0 * 42 MEANS -42 ??? (4 comments)

+5
−0

The concept that is important to understand here is the concept of operator precedence.

Assume you have an expression `a + b * c`. What does it mean? You could have the following options: `(a + b) * c` or `a + (b * c)`. By adding the parentheses it can be made clear what shall be computed first, but what without the parentheses?

In mathematics as well as in all programming languages that I am aware of that allow such expressions (some languages don't use this kind of syntax at all) the meaning of `a + b * c` is `a + (b * c)`. This is because the `*` is commonly defined to have a higher precedence than `+`. If of two operators one has higher precedence this means, that that one "wins" over the other when it comes to computation order. Since `*` has a higher precedence than the `+`, you first have to compute the `*` and afterwards the `+`.

Looking at the expression from the question: `(x == 42) * -1 + (x != 42) * x` thus means the same as `((x == 42) * -1) + ((x != 42) * x)`. Thus, when `x` has the value 42, this results in `(1 * -1) + (0 * x)` that is -1 + 0 which gives -1.

Why does this post require moderator attention?

+2
−0
Now, (x != 42) which is false yields 0

OK so far.

so I have expected to get in console "-42"

No. As you say, the expression evolves:

```(x == 42) * -1 + (x != 42) * x
(1) * -1    +    (0) * x
-1       +       0
```

Negative one plus zero is negative one.

Why does this post require moderator attention? 