解构赋值(Destructuring Assignment)是 JavaScript 中的一种语法,用于从数组或对象中提取值,并将其赋值给变量。解构赋值可以使代码更简洁、更易读。以下是关于解构赋值的详细说明和示例:


1. 数组的解构赋值

(1) 基本用法

从数组中提取值,并赋值给变量。

示例:
const arr = [1, 2, 3];

// 传统写法
const a = arr[0];
const b = arr[1];
const c = arr[2];

// 解构赋值
const [x, y, z] = arr;

console.log(x, y, z); // 输出: 1 2 3

(2) 忽略某些值

可以使用逗号跳过不需要的值。

示例:
const arr = [1, 2, 3];

const [a, , c] = arr;

console.log(a, c); // 输出: 1 3


(3) 默认值

如果解构的值是 undefined,可以使用默认值。示例为变量设定了默认值(10,20)。当数组中的元素数量少于变量数量时,未匹配到元素的变量会使用默认值。

示例:
const arr = [1];

const [a = 10, b = 20] = arr;

console.log(a, b); // 输出: 1 20

a = 10:若 arr 数组里有第一个元素,就将其赋值给 a;要是没有,a 就会使用默认值 10
b = 20:若 arr 数组里有第二个元素,就把它赋值给 b;若没有,b 就使用默认值 20
由于 arr 数组中仅有一个元素 1,所以 a 被赋值为 1;而数组中不存在第二个元素,因此 b 使用默认值 20。最终输出的结果是 1 20


(4) 剩余值

使用 ... 将剩余的值赋值给一个变量。

示例:
const arr = [1, 2, 3, 4];

const [a, b, ...rest] = arr;

console.log(a, b, rest); // 输出: 1 2 [3, 4]


2. 对象的解构赋值

(1) 基本用法

从对象中提取值,并赋值给变量。

示例:
const person = {
  name: "Alice",
  age: 25
};

// 传统写法
const name = person.name;
const age = person.age;

// 解构赋值
const { name, age } = person;

console.log(name, age); // 输出: Alice 25

(2) 重命名变量

可以使用 : 将属性值赋值给不同名称的变量。

示例:
const person = {
  name: "Alice",
  age: 25
};

const { name: fullName, age: years } = person;

console.log(fullName, years); // 输出: Alice 25

(3) 默认值

如果解构的值是 undefined,可以使用默认值。

示例:
const person = {
  name: "Alice"
};

const { name, age = 20 } = person;

console.log(name, age); // 输出: Alice 20

(4) 嵌套解构

可以解构嵌套的对象。

示例:
const person = {
  name: "Alice",
  age: 25,
  address: {
    city: "Beijing",
    country: "China"
  }
};

const { name, address: { city } } = person;

console.log(name, city); // 输出: Alice Beijing


(5) 剩余值

使用 ... 将剩余的属性赋值给一个变量。

示例:
const person = {
  name: "Alice",
  age: 25,
  city: "Beijing"
};

const { name, ...rest } = person;

console.log(name, rest); // 输出: Alice { age: 25, city: 'Beijing' }

3. 函数参数中的解构赋值

(1) 对象参数

在函数参数中使用解构赋值,可以直接提取对象中的属性。

示例:
function greet({ name, age }) {
  console.log(`Hello, ``{name}. You are ``{age} years old.`);
}

const person = {
  name: "Alice",
  age: 25
};

greet(person); // 输出: Hello, Alice. You are 25 years old.

(2) 数组参数

在函数参数中使用解构赋值,可以直接提取数组中的值。

示例:
function sum([a, b]) {
  return a + b;
}

const arr = [1, 2];

console.log(sum(arr)); // 输出: 3


4. 解构赋值的注意事项

(1) 解构失败

如果解构的值是 undefined 或 null,解构会失败并抛出错误。

示例:
const { a } = undefined; // 报错: Cannot destructure property 'a' of 'undefined'

(2) 默认值与重命名

可以同时使用默认值和重命名。

示例:
const person = {
  name: "Alice"
};

const { name: fullName = "Unknown", age = 20 } = person;

console.log(fullName, age); // 输出: Alice 20

5. 总结

  • 解构赋值是一种从数组或对象中提取值的语法。

  • 数组解构赋值使用 [],对象解构赋值使用 {}

  • 解构赋值支持默认值、重命名、嵌套解构和剩余值。

  • 解构赋值可以使代码更简洁、更易读。