{} + [] in Javascript
javascript
Solution
The core reason is that `{}` means a different thing in a statement context `{ statement0; statement1 }` than in an expression context `({ "property": value, ... })`.
{} + []
is a block and a unary comparison operator so the same as
{} // An empty block of statements.
(+ []) // Use of prefix operator +.
The other is a use of the plus operator which when used with two objects concatenates them as in
return String({}) + String([])
Since `Array.prototype.toString` joins the array on commas, it is similar to
return String({}) + [].join(",")
which reduces to
return "[Object object]" + "";
and finally to
return "[Object object]"
Problem
Possible Duplicate: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wat' talk for CodeMash 2012? When I type ``` {} + [] ``` in the Google Chrome JavaScript console, I get ``` 0 ``` as a result. However, when I type ``` Function("return {} + []")() ``` I get ``` "[object Object]" ``` as a result. I would think that both operations should return the same result, as one is simply a wrapper around the other. Why do they return different results?