Shaving Bytes on JavaScript Conditionals

By  on  

Whenever you work with JavaScript code, it's as though there's always a shorter way to code something.  You thought that a code set was basic until you found out that something was basic...er.  One of those code shortcuts can be found with conditions, specifically short if clauses.

A typical short if clause would look something like this:

if(callback) {
	callback();
}

Oddly enough this conditional can be made shorter:

callback && callback();

The && is less code than the if(){}; of course only by a few characters but does the same job. You could argue that readability suffers but that's up to individual developers.

Recent Features

  • By
    5 Awesome New Mozilla Technologies You’ve Never Heard Of

    My trip to Mozilla Summit 2013 was incredible.  I've spent so much time focusing on my project that I had lost sight of all of the great work Mozillians were putting out.  MozSummit provided the perfect reminder of how brilliant my colleagues are and how much...

  • 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
    Degradable SELECT onChange

    Whenever I go to Google Analytics I notice a slight flicker in the dropdown list area. I see a button appear for the shortest amount of time and the poof! Gone. What that tells me is that Google is making their site function...

  • By
    HTML5 Input Types Alternative

    As you may know, HTML5 has introduced several new input types: number, date, color, range, etc. The question is: should you start using these controls or not? As much as I want to say "Yes", I think they are not yet ready for any real life...

Discussion

  1. It’s worth noting that JS minifiers like Google’s Closure Compiler will do this for you, so the first option is probably better so you get the readability without sacrificing performance. The Closure Compiler outputs it as this:

    callback&&callback();

    http://closure-compiler.appspot.com/home

  2. Herbut

    and also jshint might shout about the shorter version (depending on the settings of course).

  3. It’s bad practice though because the code is hard to maintain, debug and extend. I could write a whole blog on why doing this is bad. I see zero benefits.

  4. Agree with comments above. I recently realized that there is no benefits of having expressions in my code so changed jshint settings and now it disallows to use them.

    IMO the expression below is pretty readable and it also takes one line:
    if (callback) callback();

  5. Agree with the “bad practice” comments.

    Sometimes you seem to post stuff just for the sake of it, or to impress beginners.

    • I appreciate your honesty but impressing people isn’t something that entertains me.

  6. Ana

    What if I also need to have an else branch?

    • There’s only “if”, I suppose. Otherwise it’s something like:

      callback ? callback() : otherThing();
      
  7. While I agree with people’s comments on code readability, I still appreciate posts like this.
    I’ve come across the ‘callback && callback();’ syntax before and had to look up wtf was going on. Had I read this post earlier, I would’ve known :)

  8. Sean

    @Dan i agree with you, posts like this are handy so you understand when you come across it in a project. Sadly, this is clearly lost on a couple of the previous commenters who already know everything there is to know.

  9. What setting will make jsHint happy?

  10. Readability is important, but for those who like to hyper-optimize their code, this is a great tip.

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