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?
In JavaScript, the array is a single variable that is used to store different elements. It is often used when we want to store a list of elements and access them by a single variable.
[] is declaring an array. {} is declaring an object. An array has all the features of an object with additional features (you can think of an array like a sub-class of an object) where additional methods and capabilities are added in the Array sub-class.
The Set object lets you store unique values of any type, whether primitive values or object references. you are passing new object not reference so it is allowing to add duplicate. which is actually visually similar but reference are different. Pass reference by assigning it to variable to access the added array.
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]"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With