Background
When I tried destructuring assignment with arrays I was able to pre-declare my variables:
let a, b, c;
let arr = [1, 2, 3, 4, 5];
[a, b, c] = arr;
console.log(a) // logs 1
console.log(b) // logs 2
console.log(c) // logs 3
This went through the Babel compiler just fine.
However when I tried to do the same with objects I got an error
let a, b, c
let obj = {cat: 'meow', dog: 'woof', mouse: 'squeak'};
{cat: a, dog: b, mouse: c} = obj;
console.log(a) // I want this to log 'meow'
console.log(b) // I want this to log 'woof'
console.log(c) // I want this to log 'squeak'
Question
Is this an ES6 or Babel quirk/problem? If it's intentional for ES6, why the difference from the way arrays are treated?
Note
I understand that replacing var
with let
means I'm not required to pre-declare my variables and that having the let
inline is valid (and, I believe, generally prefered). I'd like to know about the difference between implementations rather than a "don't do it like that at all" answer.