the Future of the Web
  • Home
  • Hire Us
  • Articles
  • About
  • Contact
  • Confusing JavaScript Equality

    Jul 25 2007

    I got tripped up today by something that took me a few minutes to figure out. I wrote this:

    if (a == b == 0) {
        // only execute if both a and b are zero
    }
    

    But this was wrong. In fact, you can write this:

    alert(3 == 4 == 0); // alerts "true"
    

    Why is that? Because of the order things are evaluated. I made the mistake of thinking == has the same result as doing =:

    var x, y;
    
    x = y = 10;
    
    alert(x); // 10
    alert(y); // 10
    

    But when you use == like that, it actually compares the firsts two values, then compares the result (true or false) against the 3rd value. It's the same as writing:

    alert(3 == 4 == 0); // true
    alert((3 == 4) == 0); // true
    

    because 3 == 4 is false, and false == 0 is true!

    Tags: javascript
    View 2 Comments | Add a comment
  • Comments

    1. Arjan Eising at 11:35pm on July 25, 2007

    Such things can really give you a headache when you can't find the problem...

    2. Mark at 8:15pm on August 8, 2007

    OMG, it even took me a few moments to get the line:
    "because 3 == 4 is false, and false == 0 is true!"
    LOL

    Add a Comment

    Note: HTML tags and entities will be converted so that they are displayed as you type them. This means if you type in <em>, people will see <em>, and if you type &lt;em&gt;, people will see &lt;em&gt;.

  • Request a Quote

  • Jesse Skinner

    Jesse Skinner
    • Hire Me
    • About Me
    • Email Me
    • RSS Feed RSS Icon
  • Recent Articles

    • Parse Accept-Language to detect a user's language
    • Twitter
    • Three years of The Future of the Web
    • Saving data to a file with PHP
    • Easy web scraping with PHP
    • See all the articles
    • IBM: Where and when to use Ajax
    • Code Igniter 1.6.0 Released
    • Update a Dev Site Automatically with Subversion
    • JavaScript Functions are Variables
    • See All...
  • Categories

    • javascript (37)
    • links (19)
    • about (18)
    • web (14)
    • server (10)
    • html (10)
    • css (8)
    • carnival (7)
    • browsers (7)
    • design (4)
    • seo (4)
    • ads (4)
    • standards (4)
    • events (4)
    • work (4)
  • Older Articles

    • May 2008
    • April 2008
    • February 2008
    • January 2008
    • December 2007
    • November 2007
    • September 2007
    • August 2007
    • July 2007
    • June 2007
    • May 2007
    • April 2007
    • March 2007
    • February 2007
    • January 2007
    • December 2006
    • November 2006
    • October 2006
    • September 2006
    • August 2006
    • July 2006
    • June 2006
    • May 2006
    • April 2006
    • March 2006
    • February 2006
    • January 2006
    • December 2005
    • November 2005
    • October 2005
    • September 2005
    • August 2005
    • April 2005
    • See All...
Copyright © 2008 Jesse Skinner | CSS | XHTML | RSS | Help | Impressum | Cutie Quilts | Internet Blog Top Sites