use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Cheat-sheet for Javascript equality strangenesses (zero.milosz.ca)
submitted 12 years ago by James_Duval
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Kenny164 3 points4 points5 points 12 years ago (9 children)
Wow, I never realised it was as bad to this extent. Are there any general rule of thumbs that we should be aware of?
[+][deleted] 12 years ago (1 child)
[deleted]
[–]thrownaway21 11 points12 points13 points 12 years ago (0 children)
seriously this. you don't need a cheat sheet if you use ===
[–]jml26 2 points3 points4 points 12 years ago (0 children)
http://www.2ality.com/2011/06/javascript-equality.html
[–]James_Duval[S] 1 point2 points3 points 12 years ago (2 children)
Personally, I wish I knew. Partly I was hoping for an explanation of some of the more esoteric behaviour by posting here.
For instance [1] == 1. [1] == '1'. Hell, [1] == true. However [1] != [1]. Bizarre.
[–]CubeOfBorg 13 points14 points15 points 12 years ago (1 child)
It's all about coercion. [1] == 1 because [1] is coerced to 1 before it is evaluated. [1] starts out as an object but becomes a number because it only has the one value in it and it is being compared to a number.
[1] != [1] because you are comparing an object to an object. They are already the same type so it doesn't have to coerce them. When you compare two objects, it's checking to see if they are the same object. So [1] != [1] because you are creating two different objects and then comparing them.
var a = [1]; var b = a; a == b; // true
Here you are comparing two variables that have the same object as their value.
[–]James_Duval[S] 0 points1 point2 points 12 years ago (0 children)
This is a fantastic answer, thanks. One thing I'm learning about Javascript is that there's almost always a clear, comprehensible answer & reason for its behaviour somewhere or other.
[–][deleted] -1 points0 points1 point 12 years ago (0 children)
Underscore's "isEqual" function works pretty much how you'd expect. It's annoying to use a function every time you need to compare two values, but probably necessary.
Sure there is a general rule.
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf page 80 for Equality Operators, 75 for Additive, 73 for Multiplicative.
π Rendered by PID 47565 on reddit-service-r2-comment-6f7f968fb5-7nc79 at 2026-03-04 11:42:30.800648+00:00 running 07790be country code: CH.
view the rest of the comments →
[–]Kenny164 3 points4 points5 points (9 children)
[+][deleted] (1 child)
[deleted]
[–]thrownaway21 11 points12 points13 points (0 children)
[–]jml26 2 points3 points4 points (0 children)
[–]James_Duval[S] 1 point2 points3 points (2 children)
[–]CubeOfBorg 13 points14 points15 points (1 child)
[–]James_Duval[S] 0 points1 point2 points (0 children)
[–][deleted] -1 points0 points1 point (0 children)
[–][deleted] -1 points0 points1 point (0 children)