Skip to content Skip to sidebar Skip to footer

Adding Empty Array With Empty Object Yields Different Results When Flipping Operands

Best way to describe my question is to illustrate by example : # node v4.3.1 > {} + [] 0 > [] + {} '[object Object]' > [] + {} === {} + [] true I have managed to find a W

Solution 1:

Case {} + []: JavaScript thinks {} is an empty block statement and it's just ignored. Then + [] -> + '' -> + 0 -> 0. The empty block statement is converted to object literal this way: ({}), so the fixed version should be: ({}) + [].


Case [] + {}: [] + {} -> '' + '[object Object]' -> "[object Object]".


Case [] + {} === {} + []: [] + {} === {} + [] -> '' + '[object Object]' === '[object Object]' + '' -> '[object Object]' === '[object Object]' -> true


Notice:

  • An array is transformed to a primitive value using toString() method, which is actually an join(','). [] is transformed to a primitive with [].join(',') -> ''
  • The regular Object is transformed to a primitive value using toString() too, which by default returns [object Object]
  • <value> + <value2> operator tries to transform it's operands to primitive values. Then tries to concatenate the result of transformation
  • + <value> operator transforms the operator to primitive value, then the result is converted to a number

Read more about addition and equality operators.

Post a Comment for "Adding Empty Array With Empty Object Yields Different Results When Flipping Operands"