参考来源: http://es6.ruanyifeng.com/#docs/destructuring 从数组或对象或者说是可以遍历的物件中的提取值, 而后对变量进行赋值,称为解构赋值. 如果不是一个可以遍历的对象的话就会报错 // 先前给变量赋值 let a = 10 let b = 20 // 解构赋值 let [a,b,c] = [1,2,3] // 非可遍历对象 let [d] = 1 // 报错 // 在解构赋值的时候面对那些不能被遍历的对象,则会优先先转为对象,再做进一步处理. let {toString:b} = 1 b 解构赋值需要的是等号两边的结构相等.即可将等号右边的结果依据相同的结构赋予左边的变量.如果解构失败,那么变量就会被赋予 undefined. 值得注意的是如果等号左边的结构如果是属于等号右边的结构的一部分的话, 还是可以实现解构赋值. let [ , , third] = ["foo", "bar", "baz"]; third // "baz" let [x, , y] = [1, 2, 3]; x // 1 y // 3 let [head, ...tail] = [1, 2, 3, 4]; head // 1 tail // [2, 3, 4] // 解构赋值失败. let a = [] a // undefined let [a,b] = [1] a // 1 b // undefined // 局部的结构赋值 let [a] = [1,2,3] a // 1 同时解构赋值是允许有默认值, 需要注意的是默认值的成立时建立在无法在等号右边找到其对应的结果,并且这个是严格等于 undefined let [a,b=3] = [1] a // 1 b // 3 // null 不是严格等于 undefined var {x = 3} = {x: null}; x // null 对象的解构赋值,一般来说等号左边是 key,才能从右边的对象获取值.但是如果需要变量与属性名不一致的时候,可以采用下面的写法. // 对象的解构赋值没有顺序性, 完全是看变量是否为对象中的 key 值. let {a,b} = { a: 10 , b: 20 } a // 10 b // 20 // 如果变量与 key 值不相同时候 let { a: c} = { a: 10, b: 20 } c // 10