you are viewing a single comment's thread
view the rest of the comments
[–] 44 points 2 years ago* (4 children)

The inspector REPL evaluates as a statement-with-value (like eval), so the {} at the beginning is considered an empty block, not an object. This leaves +[], which is 0. I don't know what would make Node differ, however.

Edit: Tested it myself. It seems Node prefers evaluating this as an expression when it can, but explicitly using eval gives the inspector behavior:

  • source
  • parent
  • hideshow 4 child comments
  • [–] 21 points 2 years ago (3 children)

    So there's yet another level of quirkery to this bullshit then, it seems. 😆 Nice digging! 🤝

    I also noticed that if you surround the curlies with parentheses, you get the same again:

    > eval('{} + []')
    0
    > eval('({}) + []')
    '[object Object]'
    
  • source
  • parent
  • hideshow 3 child comments
  • [–] 10 points 2 years ago (2 children)

    Yep, parentheses force {} to be interpreted as an expression rather than a block — same reason why IIFEs have !function instead of just function.

  • source
  • parent
  • hideshow 2 child comments