title: ES6 fail-soft destructuring
body: <p>On the Babel website, I found the following demo in the scope of destructuring: </p>
  
  <pre><code>// Fail-soft destructuring
  var [a] = [];
  a === undefined; 
  </code></pre>
  
  <p>After transpiling this piece of code with Babel, I get the following result in ES5: </p>
  
  <pre><code>"use strict";
  
  var _ref = [];
  var a = _ref[0];
  </code></pre>
  
  <p>What is fail-soft destructuring used for, and what is the logic behind the transpiled syntax? Edit: why does Babel transpile the ES6 code this way, rather than just assigning <code>undefined</code> to the variable? </p>
  
  <p>Edit: 
  I see, I guess it just puts the variable value to <code>undefined</code>instead of throwing an error. Still some doubt about the transpilation logic though. </p>