Question

I'm writing an app using Enyo2 which comes with a minification tool based on UglifyJS. I've noticed that:

var t = false

is replaced with

var t=!1

The same way true is replaced with !0. I'm sure there is a good explanation for that, I just can't find it. Any idea?

Was it helpful?

Solution

There is one apparently. If you use 1 or 0 to translate true or false, it would be shorter but seen as integers. If you add ! in front and reverse them, it will be coalesced into booleans and still be short.

OTHER TIPS

It is the smallest non-ambiguous way to express the value.

true uses 4 characters on the wire and false uses 5 characters. !1 & !0 use 2 characters.

In JavaScript, 0 is a falsy value. This means that 0 equates to false when represented as a boolean type. 1 on the other hand; or any other positive number for that matter, is not a falsy value and will equate to true.

Here we could just set:

t = 0; // false
t = 1; // true

The problem with this is that these values are integers (numbers) and not boolean values (true or false). Using a strict equality check (===) we'd find:

t = 0;
t == false; // true
t === false; // false

The ! operator performs a logical NOT operation on the value, and can be used as a quick way to convert any value to boolean:

t = !1;
t == false; // true
t === false; // true

Performance-wise, there is not really much difference between if (!t) and if (t == true), however in minification terms this reduces our JavaScript by 7 bytes, allowing it to be downloaded ever so slightly quicker.

Negation converts a non-boolean, but truthy value to a pure boolean.

I ran this in Chrome Developer Tools:

> !1
false
> !0
true

Therefore, !1 is interchangeable with false and !0 is interchangeable with true. So now that we know it's safe to change it, the next question is why. Well, because it's fewer bytes. The point of minification is to make the code smaller, but compatible.

Long-story short, it's a safe way to compress the literal true and false so they take less space when transmitting over the wire.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top