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
    Interview with a Pornhub Web Developer

    Regardless of your stance on pornography, it would be impossible to deny the massive impact the adult website industry has had on pushing the web forward. From pushing the browser's video limits to pushing ads through WebSocket so ad blockers don't detect them, you have...

  • By
    Facebook Open Graph META Tags

    It's no secret that Facebook has become a major traffic driver for all types of websites.  Nowadays even large corporations steer consumers toward their Facebook pages instead of the corporate websites directly.  And of course there are Facebook "Like" and "Recommend" widgets on every website.  One...

Incredible Demos

  • By
    CSS Rounded Corners

    The ability to create rounded corners with CSS opens the possibility of subtle design improvements without the need to include images.  CSS rounded corners thus save us time in creating images and requests to the server.  Today, rounded corners with CSS are supported by all of...

  • By
    :valid, :invalid, and :required CSS Pseudo Classes

    Let's be honest, form validation with JavaScript can be a real bitch.  On a real basic level, however, it's not that bad.  HTML5 has jumped in to some extent, providing a few attributes to allow us to mark fields as required or only valid if matching...

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!