724
JavaScript (sh.itjust.works)
you are viewing a single comment's thread
view the rest of the comments
[-] PoolloverNathan@programming.dev 43 points 1 week ago* (last edited 1 week ago)

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:

[-] victorz@lemmy.world 20 points 1 week ago

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]'
[-] PoolloverNathan@programming.dev 10 points 1 week ago

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

[-] dejected_warp_core@lemmy.world 3 points 1 week ago

/me goes back to get second folding chair.

[-] victorz@lemmy.world 1 points 1 week ago* (last edited 1 week ago)

I thought IIFE's usually looked like (function (...params) {})(...args). That's not the latest way? To be honest I never used them much, at least not after arrow functions arrived.

this post was submitted on 23 Jun 2024
724 points (96.4% liked)

Programmer Humor

18253 readers
1 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS