Click here to Skip to main content
15,887,436 members
Articles / Web Development / HTML
Alternative
Tip/Trick

Javascript Operators === & !==

Rate me:
Please Sign up or sign in to vote.
4.33/5 (3 votes)
10 Mar 2011CPOL2 min read 8.8K   1   4
The algorithm behind the EqualityExpression (==,===, !=, !==) is a bit more complex than what is portrayed in some of the other alternates and comments, and a correct understanding of this actually quite important in order to avoid unforeseen errors in javascript programs.The short story is...
The algorithm behind the EqualityExpression (==,===, !=, !==) is a bit more complex than what is portrayed in some of the other alternates and comments, and a correct understanding of this actually quite important in order to avoid unforeseen errors in javascript programs.

The short story is that the equality operators will always compare values of identical types, and if the original operands are not equal, then an algorithm is used to coerce one of the values to the other.

If you want a good explanation of all of this, then take a look here[^]

Regarding the algorithm, here is the formal explanation from the ECMAScript 262-3[^]/5 spec:

11.9.1 The Equals Operator ( == )
The production EqualityExpression : EqualityExpression == RelationalExpression is evaluated as follows:

  1. Evaluate EqualityExpression.
  2. Call GetValue(Result(1)).
  3. Evaluate RelationalExpression.
  4. Call GetValue(Result(3)).
  5. Perform the comparison Result(4) == Result(2). (see 11.9.3).
  6. Return Result(5).


11.9.3 The Abstract Equality Comparison Algorithm
The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:

  1. If Type(x) is different from Type(y), go to step 14.
  2. If Type(x) is Undefined, return true.
  3. If Type(x) is Null, return true.
  4. If Type(x) is not Number, go to step 11.
  5. If x is NaN, return false.
  6. If y is NaN, return false.
  7. If x is the same number value as y, return true.
  8. If x is +0 and y is −0, return true.
  9. If x is −0 and y is +0, return true.
  10. Return false.
  11. If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same length and same characters in corresponding positions). Otherwise, return false.
  12. If Type(x) is Boolean, return true if x and y are both true or both false. Otherwise, return false.
  13. Return true if x and y refer to the same object or if they refer to objects joined to each other (see 13.1.2). Otherwise, return false.
  14. If x is null and y is undefined, return true.
  15. If x is undefined and y is null, return true.- 5 6 -
  16. If Type(x) is Number and Type(y) is String,
    return the result of the comparison x == ToNumber(y).
  17. If Type(x) is String and Type(y) is Number,
    return the result of the comparison ToNumber(x) == y.
  18. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
  19. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
  20. If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).
  21. If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.
  22. Return false

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) BRIK
Norway Norway
I am a partner at BRIK where we create rich web sites focusing on content, enabling non-technical users to publish a variety of media easily.
We are also the technical partner on ExorLive, a web application for planning and tracking workouts.

I have worked mainly with .Net, MySQL and Javascript, and today most of my work is centered around creating rich and effective frontends with Javascript backed by Javascript-enabled webservices.

I am also the manager of the easyXDM project, enabling web developers to easily expose javascript API's.

Comments and Discussions

 
GeneralReason for my vote of 5 nice one Pin
AntounPG19-Mar-11 9:57
AntounPG19-Mar-11 9:57 
GeneralReason for my vote of 5 Excellent Pin
Anyelo Roy14-Mar-11 14:23
Anyelo Roy14-Mar-11 14:23 
General@egozi13 It's not a ripoff - its the official specification ... Pin
Øyvind Sean Kinsey10-Mar-11 20:29
Øyvind Sean Kinsey10-Mar-11 20:29 
GeneralReason for my vote of 3 Although very accurate, this is not ... Pin
egozi1310-Mar-11 9:31
egozi1310-Mar-11 9:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.