let,const,和解构赋值总结

49 阅读5分钟

let和const

共同作用

  • 声明变量
  • 块级作用域内使用,只在代码块中可以使用
  • 不存在变量提升(使用变量后再声明,在let和const中会报错)
  • 在不存在变量提升的基础上,在声明变量前,会存在暂时性死区
  • 相同作用域内禁止重复声明
  • 声明的变量,不属于顶层对象(window)的属性

const 使用方法

  • 声明之后的值不可进行改变

结构赋值

数组的解构赋值

数组的解构赋值是一种简洁的语法,允许你将数组中的值赋给变量。通过解构赋值,你可以从数组中提取值并将其分配给独立的变量,或者直接操作数组中的部分元素。

基本用法

你可以将数组的元素直接解构赋值给变量:

const nums = [10, 20, 30];
​
// 将数组中的元素分别赋给 a, b, c
const [a, b, c] = nums;
​
console.log(a); // 输出 10
console.log(b); // 输出 20
console.log(c); // 输出 30

跳过元素

使用逗号 , 来跳过数组中的某些元素:

const nums = [10, 20, 30, 40, 50];
​
// 只解构第一个和第三个元素
const [first, , third] = nums;
​
console.log(first); // 输出 10
console.log(third); // 输出 30

剩余元素

使用 rest 参数(...)来收集数组中剩余的元素:

const nums = [10, 20, 30, 40, 50];
​
// 解构前两个元素,其余的放在一个新数组中
const [first, second, ...rest] = nums;
​
console.log(first); // 输出 10
console.log(second); // 输出 20
console.log(rest); // 输出 [30, 40, 50]

默认值

你可以为解构赋值的变量提供默认值,以防数组中没有足够的元素:

const nums = [10];
​
// 为解构赋值提供默认值
const [a = 0, b = 0, c = 0] = nums;
​
console.log(a); // 输出 10
console.log(b); // 输出 0
console.log(c); // 输出 0

嵌套数组解构

如果数组中包含嵌套数组,你可以通过嵌套解构来提取值:

const nums = [10, [20, 30], 40];
​
// 嵌套解构
const [a, [b, c], d] = nums;
​
console.log(a); // 输出 10
console.log(b); // 输出 20
console.log(c); // 输出 30
console.log(d); // 输出 40

从数组的特定索引开始解构

要从数组的特定索引开始解构,可以结合使用 slice() 方法:

const nums = [10, 20, 30, 40, 50];
​
// 从索引 2 开始解构
const [a, b, c] = nums.slice(2);
​
console.log(a); // 输出 30
console.log(b); // 输出 40
console.log(c); // 输出 50

总结

  • 基础用法:从数组中提取值,赋给独立变量。
  • 跳过元素:用逗号跳过不需要的元素。
  • 剩余参数:用 ...rest 收集剩余元素。
  • 默认值:处理数组长度不足的情况。
  • 嵌套解构:提取嵌套数组中的值。

这些特性使得数组解构赋值在处理数组数据时非常方便和强大。

对象的解构赋值

对象的解构赋值是一种简洁的语法,用于从对象中提取属性值并将其赋值给变量。这种方式不仅可以提高代码的可读性,还可以方便地处理对象中的数据。

基本用法

对象解构赋值允许你从对象中提取属性值并将其赋给变量。变量名必须与对象中的属性名相同。

const person = {
    name: 'Alice',
    age: 25,
    city: 'New York'
};
​
// 解构赋值
const { name, age, city } = person;
​
console.log(name); // 输出 'Alice'
console.log(age);  // 输出 25
console.log(city); // 输出 'New York'

更改变量名

你可以为解构出来的变量指定一个新的名称,而不是使用属性名作为变量名。

const person = {
    name: 'Alice',
    age: 25
};
​
// 更改变量名
const { name: personName, age: personAge } = person;
​
console.log(personName); // 输出 'Alice'
console.log(personAge);  // 输出 25

默认值

如果对象中没有某个属性,解构赋值时可以为变量提供一个默认值。

const person = {
    name: 'Alice',
    age: 25
};
​
// 使用默认值
const { name, age, city = 'Unknown' } = person;
​
console.log(name); // 输出 'Alice'
console.log(age);  // 输出 25
console.log(city); // 输出 'Unknown'

嵌套对象解构

如果对象中包含嵌套对象,可以通过嵌套解构来提取其中的属性。

const person = {
    name: 'Alice',
    address: {
        city: 'New York',
        zipcode: '10001'
    }
};
​
// 嵌套对象解构
const { name, address: { city, zipcode } } = person;
​
console.log(name);    // 输出 'Alice'
console.log(city);    // 输出 'New York'
console.log(zipcode); // 输出 '10001'

剩余参数

你可以使用 rest 参数 (...) 来获取对象中剩余的属性。

const person = {
    name: 'Alice',
    age: 25,
    city: 'New York'
};
​
// 剩余参数
const { name, ...otherInfo } = person;
​
console.log(name);       // 输出 'Alice'
console.log(otherInfo);  // 输出 { age: 25, city: 'New York' }

在函数参数中使用解构

解构赋值可以直接在函数参数中使用,这在处理带有多个属性的对象参数时非常有用。

function greet({ name, age }) {
    console.log(`Hello, my name is ${name} and I am ${age} years old.`);
}
​
const person = {
    name: 'Alice',
    age: 25
};
​
greet(person); // 输出 'Hello, my name is Alice and I am 25 years old.'

深度嵌套解构

你可以在解构时直接对深层嵌套的对象进行解构。

const person = {
    name: 'Alice',
    address: {
        city: 'New York',
        zip: {
            code: '10001',
            extended: '1234'
        }
    }
};
​
// 深度嵌套解构
const { address: { zip: { code, extended } } } = person;
​
console.log(code);     // 输出 '10001'
console.log(extended); // 输出 '1234'

解构并使用默认值

可以结合使用嵌套解构和默认值,以处理可能缺失的属性。

const person = {
    name: 'Alice',
    address: {
        city: 'New York'
    }
};
​
// 解构并使用默认值
const { address: { city, zipcode = '00000' } } = person;
​
console.log(city);    // 输出 'New York'
console.log(zipcode); // 输出 '00000'

总结

  • 基本用法:从对象中提取属性值并赋给变量。
  • 更改变量名:通过 属性名: 变量名 语法改变变量名称。
  • 默认值:为解构时不存在的属性设置默认值。
  • 嵌套解构:解构嵌套对象中的属性。
  • 剩余参数:使用 ... 操作符获取剩余的属性。
  • 函数参数解构:在函数参数中直接进行对象解构。
  • 深度嵌套解构:处理深层嵌套对象的解构。

这些特性使得对象解构赋值在处理复杂对象数据时非常强大且灵活。

其它解构赋值还有,字符串解构赋值,数值和布尔值的解构赋值

结构赋值的用途

  • 交换变量的值
  • 从函数返回多个值
  • 提取JSON数据
  • 获取指定的模块