DEV Community

Discussion on: Who can explain this deceptively simple destructuring assignment?

Collapse
 
stereobooster profile image
stereobooster • Edited

You miss semicolon

var b = {};
[b] = [3]
console.log("b->",b)
Enter fullscreen mode Exit fullscreen mode

this would work as expected. It is easy to discover, if you use let:

let b = {}
[b] = [3]
console.log("b->",b)
// Uncaught ReferenceError: can't access lexical declaration 'b' before initialization
Enter fullscreen mode Exit fullscreen mode

Original code:

var b = {}
[b] = [3]
Enter fullscreen mode Exit fullscreen mode

which is the same as

var b = {}[b] = [3]
Enter fullscreen mode Exit fullscreen mode

which is the same as

var b = [3]
Enter fullscreen mode Exit fullscreen mode
Collapse
 
cabrouwers profile image
CABrouwers • Edited

Thanks a lot. It seemed absurd to me. All makes sense now!

Collapse
 
myleftshoe profile image
myleftshoe

Wow, nice spot, and worrying for me because I never use semicolons anymore. But I also almost never use var. I guess I've been luck so far.