- 按照一定的模式,从数组和对象中提取值,对变量进行赋值。
- 数组解构
- 对象解构
- 字符串解构
- 应用
数组的解构赋值:
let [a, b, c] = [1, 2, 3, 4]console.log(a, b, c) // 1 2 3let [a, b] = [1, 2, 3, 4]console.log(a, b) // 1 2let [a, b, c=1] = [1, 2]console.log(a, b, c) // 1 2 1let [a, b, c] = [1, 2, [3, 4]]console.log(a, b, c) // 1 2 [ 3, 4 ]let [a, b, c] = [1, 2]console.log(a, b, c) // 1 2 undefinedlet [a, b, [c]] = [1, 2, [3, 4]]console.log(a, b, c) // 1 2 3
对象的解构赋值:
let a = {name: 'zza',age: 20}let {name, age} = a; // zza 20// 其别名let {name: uname, age: uage} = a // zza 20// 解构复制也是根据key的值进行一一对应的,所以{}中接受的key的顺序不会影响最后的结果
字符串的解构赋值:
// 字符串的解构赋值let lover = 'cjj521'let [a, b, c, d, e, f] = loverconsole.log(a, b, c, d, e, f) // c j j 5 2 1
解构赋值相对于默认值的应用:
// 解构赋值对于默认值的应用:let {name, age=18} = {name: 'zza',// age: 12}console.log(name, age)
证明解构复制是惰性赋值:有参数对应就赋值,没有的话就取指定的默认值
// 证明解构赋值是惰性赋值function foo() {console.log(123)}let [a = foo()] = [1] // 这里的foo()不会执行let [b = foo()] = [] // 这里的foo() 会执行,找不到对应的赋值,就赋默认值,默认值是函数,就直接执行函数了
函数参数的解构赋值:
// 函数参数数组的解构赋值function foo([a, b, c]) {console.log(a, b, c)}foo([1, 2, 3])
函数参数为对象的解构复制:
// 函数参数对象的解构赋值function foo({name, age}) {console.log(name, age)}foo({name: zza, age: 12})
函数返回值的解构赋值:
// 函数返回值的解构赋值function foo() {let obj = {name: 'zza',age: 12}return obj}let {name, age} = foo()console.log(name, age)
提取json数据的解构复制:
// 提取json数据的解构赋值let json = '{"a": "hello", "b": "world"}'let {a, b} = JSON.parse(json) // 使用方法 JSON.parse(str)将字符串解析为jsonconsole.log(a, b)
