- 按照一定的模式,从数组和对象中提取值,对变量进行赋值。
- 数组解构
- 对象解构
- 字符串解构
- 应用
数组的解构赋值:
let [a, b, c] = [1, 2, 3, 4]
console.log(a, b, c) // 1 2 3
let [a, b] = [1, 2, 3, 4]
console.log(a, b) // 1 2
let [a, b, c=1] = [1, 2]
console.log(a, b, c) // 1 2 1
let [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 undefined
let [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] = lover
console.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)将字符串解析为json
console.log(a, b)