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) {
}