变量的解构赋值
- “模式匹配”: 只要等号两边的模式相同,左边的变量久会被赋予相应的值;如果解构不成功,变量的值就等于undefined。
- 只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。
默认值
- 如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。 - 1 
 2
 3
 4
 5- function f() { 
 console.log('aaa');
 }
 let [x = f()] = [1]; //因为x能取到值,所以函数f根本不会执行
- 默认值可以引用解构赋值的其他变量,但该变量必须已经声明。 
- ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,如果一个数组成员不严格等于 - undefined,默认值是不会生效的。
对象的解构赋值
- 数组的元素是按次序排列的,变量的取值由它的位置决定,而对象的属性没有次序,变量必须与属性同名,才能取到正确的值 
- 对象的解构赋值的内部机制,是:先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者(注:对象解构赋值只看分号后面的,如果有的话) - 1 
 2
 3
 4- let { foo: baz } = { foo: "aaa", bar: "bbb" }; 
 baz // "aaa"
 foo // error: foo is not defined
 //上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。
- 如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错。