1. 数组的解构赋值
1.1 基本用法
const [ a, b, c] = [ 1 , 2 , 3 ] ;
console. log ( a) ;
console. log ( b) ;
console. log ( c) ;
const [ x, , y] = [ 1 , 2 , 3 ] ;
console. log ( x) ;
console. log ( y) ;
const [ first, ... rest] = [ 1 , 2 , 3 , 4 , 5 ] ;
console. log ( first) ;
console. log ( rest) ;
1.2 默认值
const [ x = 1 , y = 2 ] = [ undefined , null ] ;
console. log ( x) ;
console. log ( y) ;
const [ a = 1 , b = a + 1 ] = [ 2 ] ;
console. log ( a) ;
console. log ( b) ;
2. 对象的解构赋值
2.1 基本用法
const { name, age } = { name : 'John' , age : 25 } ;
console. log ( name) ;
console. log ( age) ;
const { name : userName, age : userAge } = { name : 'John' , age : 25 } ;
console. log ( userName) ;
console. log ( userAge) ;
const { name, address : { city, country }
} = { name : 'John' , address : { city : 'New York' , country : 'USA' }
} ;
console. log ( name) ;
console. log ( city) ;
console. log ( country) ;
2.2 默认值
const { name = 'Anonymous' , age = 18 } = { name : 'John' } ;
console. log ( name) ;
console. log ( age) ;
const { name : userName = 'Anonymous' , age : userAge = 18 } = { } ;
console. log ( userName) ;
console. log ( userAge) ;
3. 函数参数的解构赋值
3.1 数组参数解构
function sum ( [ x, y] ) { return x + y;
}
console. log ( sum ( [ 1 , 2 ] ) ) ;
function move ( [ x = 0 , y = 0 ] = [ ] ) { return [ x, y] ;
}
console. log ( move ( [ 1 , 2 ] ) ) ;
console. log ( move ( [ 1 ] ) ) ;
console. log ( move ( [ ] ) ) ;
console. log ( move ( ) ) ;
3.2 对象参数解构
function printUser ( { name, age } ) { console. log ( \`\${ name} is \${ age} years old\`) ;
}
printUser ( { name : 'John' , age : 25 } ) ;
function fetchAPI ( { url, method = 'GET' , headers = { 'Content-Type' : 'application/json' }
} = { } ) { return { url, method, headers } ;
} console. log ( fetchAPI ( { url : '/api/users' } ) ) ;
4. 实际应用场景
4.1 交换变量
let x = 1 ;
let y = 2 ;
[ x, y] = [ y, x] ;
console. log ( x) ;
console. log ( y) ;
4.2 从函数返回多个值
function getUserInfo ( ) { return { name : 'John' , age : 25 , email : 'john@example.com' } ;
} const { name, email } = getUserInfo ( ) ;
console. log ( name) ;
console. log ( email) ;
4.3 处理 API 响应
async function fetchUserData ( ) { const response = await fetch ( 'https://api.example.com/user' ) ; const { id, name, profile : { age, avatar } } = await response. json ( ) ; return { userId : id, userName : name, userAge : age, userAvatar : avatar} ;
}
4.4 模块导入
import { useState, useEffect } from 'react' ;
import { useState as useStateHook } from 'react' ;
5. 注意事项和最佳实践
5.1 解构失败的处理
const [ a = 1 ] = [ ] ;
console. log ( a) ; const { name = 'Anonymous' } = { } ;
console. log ( name) ;
const { x = 1 } = null || { } ;
console. log ( x) ;
5.2 解构嵌套对象
const { user : { profile : { address : userAddress } }
} = response;
const { user } = response;
const { profile } = user;
const { address } = profile;
5.3 解构与类型检查
interface User { name: string ; age: number ; address? : { city: string ; country: string ; } ;
} function processUser ( { name, age, address = { city: '' , country: '' } } : User) {
}