In IE and Chrome, typing this into the JavaScript console throws an exception:
{} == false // "SyntaxError: Unexpected token =="
However, all of these statements are evaluated with no problem:
false == {} // false
({} == false) // false
var a = {};
a == false // false
Is this intentional behavior? Why does this happen?
In IE and Chrome, typing this into the JavaScript console throws an exception:
{} == false // "SyntaxError: Unexpected token =="
However, all of these statements are evaluated with no problem:
false == {} // false
({} == false) // false
var a = {};
a == false // false
Is this intentional behavior? Why does this happen?
Share Improve this question asked May 22, 2014 at 1:50 JonnJonn 1,6741 gold badge16 silver badges26 bronze badges 9 | Show 4 more comments1 Answer
Reset to default 24In the console, when you start a statement with {}
, you are not creating an object literal, but a code block (i.e. the same block as you would make with an if
statement or a loop body). A symbol like ==
is then obviously not expected afterwards.
If you think of a code block, you know that something like a = 5;
could come after it:
if (some_condition) {
// do something
}
a = 5;
You can then use this to test in the console, and find that it works just fine:
{} a = 5;
[] == false
is throwing me, but I feel like I've seen it before. Edit: Aha! The array'stoString
method is secretly called, producing''
, which is falsey! Correspondingly,[] == ''
istrue
. – ajp15243 Commented May 22, 2014 at 2:00function a() { b: 1 }
NOT throw an exception? – user663031 Commented May 22, 2014 at 3:18