Shaving Bytes with JavaScript Booleans

By  on  

Developers are always search for ultimate way to create something with the least amount of code.  This, of course, is one of the reasons we use minifiers: to serve code as small as possible.  Of course this practice has numerous benefits, like faster download time, less storage consumption, etc.  One way that minifiers are able to shave bytes off of JavaScript code is changing the way booleans are used.

true === !0 // Save 2 chars

false === !1 // Save 3 chars

A few bytes of every true and false go away with the ! evaluation.  If you set one-letter variables names to those values, you may end up saving more.  Keep in mind I'm not telling you to do this in your source code -- minifiers like Uglify JS will do this for you.  Just something neat to know about though!

Recent Features

  • By
    Animated 3D Flipping Menu with CSS

    CSS animations aren't just for basic fades or sliding elements anymore -- CSS animations are capable of much more.  I've showed you how you can create an exploding logo (applied with JavaScript, but all animation is CSS), an animated Photo Stack, a sweet...

  • By
    Vibration API

    Many of the new APIs provided to us by browser vendors are more targeted toward the mobile user than the desktop user.  One of those simple APIs the Vibration API.  The Vibration API allows developers to direct the device, using JavaScript, to vibrate in...

Incredible Demos

  • By
    CSS Ellipsis Beginning of String

    I was incredibly happy when CSS text-overflow: ellipsis (married with fixed width and overflow: hidden was introduced to the CSS spec and browsers; the feature allowed us to stop trying to marry JavaScript width calculation with string width calculation and truncation.  CSS ellipsis was also very friendly to...

  • By
    Printing MooTools Accordion Items

    Sometimes we're presented with unforeseen problems when it comes to our JavaScript effects. In this case, I'm talking about printing jQuery and MooTools accordions. Each "closed" accordion content element has its height set to 0 which means it will be hidden when the...

Discussion

  1. Glad you aren’t advocating coding like this directly. Can’t beat true/false for readability.

  2. Roman

    Coercions like Number to Boolean doesn’t affect performance?

  3. Maybe too simple of a test: http://jsperf.com/bool-num-test

    Looks like using !0 and !1 may be faster (in Chrome 35) but only marginally.

    • MaxArt

      Even if that’s true, and it’s not due to some statistical error, the gain is so small it’s not really worth it.

    • Those are noops anyway. I would be surprised if the JS engine just optimise them away at compile time.

    • didn’t just*

  4. Still prefer true/false for readability. As you said, it is better to let the Minifier to do this for us. It is better to keep the true/false in our code.

  5. I expect the gain to be lost as soon as the file gets gzipped. I am wrong?

  6. oresh

    You should also remember the bitwise operations like
    !~number, that returns true only for -1

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!