ES6数组、对象、函数参数解构

85 阅读2分钟
  1. 数组解构

    • 基本解构

      • 数组解构是将数组中的元素提取出来并赋值给变量的一种方式。例如,对于数组[1, 2, 3],可以这样解构:

let [a, b, c] = [1, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
  • 解构的变量顺序要与数组元素的顺序相对应,a被赋值为数组的第一个元素,b为第二个元素,c为第三个元素。

  • 部分解构和跳过元素

    • 可以选择性地提取数组中的部分元素,通过使用逗号来跳过某些位置。例如:

let [, second,, fourth] = [1, 2, 3, 4];
console.log(second); // 2
console.log(fourth); // 4
  • 这里第一个和第三个元素被跳过,只获取了第二个和第四个元素。

  • 剩余元素解构

    • 使用...语法可以获取数组中的剩余元素。例如:

let [first,...rest] = [1, 2, 3, 4];
console.log(first); // 1
console.log(rest); // [2, 3, 4]
  • first获取了数组的第一个元素,rest是一个包含从第二个元素开始的所有剩余元素的新数组。

  • 交换变量值

    • 数组解构可以很方便地交换两个变量的值。例如:

let x = 1;
let y = 2;
[x, y] = [y, x];
console.log(x); // 2
console.log(y); // 1
  1. 对象解构

    • 基本解构

      • 对象解构是根据对象的属性名来提取属性值并赋值给变量。例如,对于对象{ name: 'John', age: 30 },可以这样解构:

let { name, age } = { name: 'John', age: 30 };
console.log(name); // 'John'
console.log(age); // 30
  • 解构的变量名要与对象的属性名相同,才能正确地提取属性值。

  • 属性重命名

    • 在解构对象时可以对变量进行重命名。例如:
let { name: fullName, age } = { name: 'John', age: 30 };
console.log(fullName); // 'John'
console.log(age); // 30
  • 这里name: fullName表示将对象中的name属性的值赋值给fullName变量。

  • 默认值

    • 可以为解构的变量设置默认值。如果对象中不存在对应的属性,就会使用默认值。例如:

let { name = 'Anonymous', age } = { age: 30 };
console.log(name); // 'Anonymous'
console.log(age); // 30
  • 因为对象中没有name属性,所以name变量使用了默认值Anonymous

  • 嵌套对象解构

    • 对于嵌套对象,可以进行多层解构。例如:

let user = {
  name: 'John',
  address: {
    street: '123 Main St',
    city: 'New York'
  }
};
let { name, address: { street, city } } = user;
console.log(name); // 'John'
console.log(street); // '123 Main St'
console.log(city); // 'New York'
  • 先从user对象中提取name属性,然后从user对象的address子对象中提取streetcity属性。

  1. 函数参数解构

    • 数组参数解构

      • 在函数参数中可以对传入的数组进行解构。例如:

function printFirstAndLast([first,...rest]) {
  console.log(first);
  console.log(rest[rest.length - 1]);
}
printFirstAndLast([1, 2, 3, 4, 5]); 
// 输出:
// 1
// 5
  • 对象参数解构

    • 函数参数也可以对传入的对象进行解构。例如:

function printUserInfo({ name, age }) {
  console.log(`Name: ${name}, Age: ${age}`);
}
printUserInfo({ name: 'John', age: 30 }); 
// 输出:
// Name: John, Age: 30