/** * 数组 的解构赋值 */{ let [foo, [[bar], baz]] = [1, [[2], 3]] console.log(foo, bar, baz) //1 2 3 let [ , , third] = [1, 2, 3] console.log(third) // 3 let [a, ...b] = [1, 2, 3, 4] console.log(a, b) // 1 [2, 3, 4]}// 如果解构不成功,变量的值就是 undefined{ let [a, b] = [1] console.log(a, b) // 1 undefined}// 不完全解构{ let arr = [1, [2, 3], 4] let [a, [b], c] = arr console.log(a, b, c) // 1 2 4 let [d, e, f] = arr console.log(d, e, f) //1 [2, 3] 4}// set 解构也可以用数组进行解构{ let [a, b, c] = new Set([11, 22, 33]) console.log(a, b, c)}// 只要是有 Interator 接口的数据结构 都可以用数组进行解构// 解构赋值的 默认值{ let [a = 2, b = 4] = [] console.log(a, b) // 2 4 // 只有当数组的值是严格的 undefined ,默认值才会生效 ===}// 默认值如果是表达式, 那么表达式是惰性求值的, 只有在用到的时候才会求职,{ function f () { return 'value'; } let [a = f()] = [1] console.log(a)}