潜聊ES6新特性--解构【干货】

前言

今天,我们来学习干货!!JavaScript中的解构

正文

JavaScript中的解构

在JavaScript中,解构赋值是一种非常方便的语法,它允许我们从数组或对象中提取数据并赋值给新的变量。通过解构赋值,我们可以更轻松地操作和处理数据。

一、解构赋值的基本语法 解构赋值可以从数组或对象中提取值,并将其赋给变量。

1. 数组解构赋值:

js 复制代码
let [变量1, 变量2, ...] = 数组;

我们从这一个案例出发:

js 复制代码
let arr = ['a', 'b', 'c', 'd', 'e', 'f']
// 这种赋值是一一对应原则,后面的'd','e'没有对应变量指定
let [x,y,z]=[ 'a', 'b', 'c', 'd', 'e']
console.log(x,y,z);
js 复制代码
输出:
a b c

我们可以从这个案例中看到,这种赋值方式let [x,y,z]=[ 'a', 'b', 'c', 'd', 'e']会从数组当中取对应的值!

看完这个案例,我们再来看看这个案例!!

js 复制代码
let arr =[1,2,3,4,5,6,7,8,9]
let newArr=[0]
//assign对象拼接
// console.log(...arr);//解构数组
console.log([...newArr, ...arr]);

有人会提问了?...arr这种书写方式是允许的吗?当然!这正是我们今天要讲的解构方法其中的第一个!4

我们来看看输出结果:

js 复制代码
输出:
[
  0, 1, 2, 3, 4,
  5, 6, 7, 8, 9
]

我们可以看到,上述案例通过解构数组,利用[...newArr, ...arr]讲两个解构数组又重新结合成了一个新的数组!

2. 对象解构赋值:

我们先来学习一下基本语法:

js 复制代码
let {属性1, 属性2, ...} = 对象;

我们再来看看一个案例!

js 复制代码
// 对象解构,自己声明的key要与要解构的对象的key值相同,name(name = name一一呼应):name(name='小花')
var {name:name,age:age} = {name:'小花',age:19}
console.log(name,age);
var {name,age} = {name:'小花',age:19}
console.log(name,age);
js 复制代码
输出:
小花 19
小花 19

也就是说,我们存在一个这样的语法,我们可以通过自己声明一个对象,保证我们自己声明的key值与我们要解构的对象的key值相同,我们就可以拿着我们声明的key值直接进行输出了!

同时,我们也可以通过这样的语法完成解构:var {name,age} = {name:'小花',age:19},因为是重名的,所以我们的解构语法可以直接写成{name,age}

还有一个案例:

js 复制代码
// 小明为默认值,如果解构找不到name一个新的值,就会采用默认值,找到了就用新值顶替掉
let {name = '小明',age:age} = {name:'小花',age:19}
console.log(name,age);//小花,19

其中小明为默认值,如果解构找不到name一个新的值,就会采用默认值,找到了就用新值顶替掉

二、解构赋值的常见用法

  1. 交换变量的值 使用解构赋值可以轻松地交换两个变量的值,而无需借助第三个变量:

    js 复制代码
    let a = 1;
    let b = 2;
    [a, b] = [b, a]; // a=2, b=1
  2. 函数参数的解构赋值 解构赋值可以方便地提取函数参数中的值,使得函数调用更加简洁:

    js 复制代码
    function greet({name, age}) {
      console.log(`Hello, ${name}! You are ${age} years old.`);
    }
    greet({name: '小明', age: 20}); // 输出:Hello, 小明! You are 20 years old.
  3. 提取数组或对象中的部分值 解构赋值可以只提取数组或对象中的部分值,而无需关心其他值:

    js 复制代码
    let [a, , c] = [1, 2, 3]; // 只提取数组中的第一个和第三个值
    console.log(a, c); // 输出:1 3
    
    let {name, ...rest} = {name: '小明', age: 20, gender: '男'}; // 只提取对象中的name属性,将其余属性放入rest对象中
    console.log(name, rest); // 输出:小明 {age: 20, gender: '男'}

三、解构赋值的一些技巧

  1. 默认值 在解构赋值中可以为变量设置默认值,当提取的值不存在时,将使用默认值:

    js 复制代码
    let [a = 1, b = 2] = [3]; // a=3, b=2
  2. 嵌套解构 解构赋值可以嵌套使用,提取更复杂的数据结构:

    js 复制代码
    let {name, skills: {frontend, backend}} = {name: '小明', skills: {frontend: 'JavaScript', backend: 'Node.js'}};
    console.log(name, frontend, backend); // 输出:小明 JavaScript Node.js
  3. 函数返回值的解构赋值 解构赋值可以方便地从函数返回值中提取需要的值:

    js 复制代码
    javascript复制function getPerson() {
      return {name: '小明', age: 20};
    }
    let {name, age} = getPerson();
    console.log(name, age); // 输出:小明 20

四、解构赋值的注意事项

  1. 解构赋值必须对应正确的数据结构,否则会报错。
  2. 解构赋值可以嵌套使用,但要注意保持结构的一致性。
  3. 解构赋值可以与rest参数结合使用,提取剩余的数组或对象。

五、解构赋值的进阶用法

  1. 函数参数的默认值和解构赋值结合使用 在函数参数中可以使用解构赋值并设置默认值,使函数调用更加灵活:

    js 复制代码
    function greet({name = '小明', age = 20} = {}) {
      console.log(`Hello, ${name}! You are ${age} years old.`);
    }
    greet(); // 输出:Hello, 小明! You are 20 years old.
    greet({name: '小红'}); // 输出:Hello, 小红! You are 20 years old.
  2. 解构赋值的别名 可以使用冒号指定变量的别名,方便地将提取的值赋给指定的变量:

    js 复制代码
    let {name: n, age: a} = {name: '小明', age: 20};
    console.log(n, a); // 输出:小明 20
  3. 解构赋值的嵌套和默认值结合使用 解构赋值可以在嵌套的数据结构中设置默认值,以处理更复杂的情况:

    js 复制代码
    let {name, skills: {frontend = 'JavaScript', backend = 'Node.js'} = {}} = {name: '小明'};
    console.log(name, frontend, backend); // 输出:小明 JavaScript Node.js

六、解构赋值的适用场景

  1. 提取函数返回值中的特定属性/值。
  2. 简化复杂数据结构的处理,如从嵌套的对象或数组中提取所需值。
  3. 函数参数的解构赋值可以提高代码可读性和灵活性。
  4. 交换变量值、数组元素的互换等常见操作。

总结:

JavaScript中的解构赋值是一项强大而灵活的特性,可以简化代码、提高可读性,并且适用于各种场景。通过掌握其基本语法、常见用法和一些高级技巧,我们能够更好地利用解构赋值来处理复杂的数据结构,提高开发效率。在实际开发中,根据具体需求,灵活运用解构赋值可以让代码更加简洁、易读,提高开发效率。

好啦!我们今天的学习就到这里啦!

欢迎大家评论留言!虚心接受!

点个赞鼓励支持一下吧!🌹🌹🌹

相关推荐
逝去的秋风6 分钟前
【代码随想录训练营第42期 Day61打卡 - 图论Part11 - Floyd 算法与A * 算法
算法·图论·floyd 算法·a -star算法
小小竹子6 分钟前
前端vue-实现富文本组件
前端·vue.js·富文本
万物得其道者成14 分钟前
React Zustand状态管理库的使用
开发语言·javascript·ecmascript
小白小白从不日白15 分钟前
react hooks--useReducer
前端·javascript·react.js
zero_one_Machel16 分钟前
leetcode73矩阵置零
算法·leetcode·矩阵
下雪天的夏风27 分钟前
TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
前端·javascript·typescript
diygwcom39 分钟前
electron-updater实现electron全量版本更新
前端·javascript·electron
volodyan42 分钟前
electron react离线使用monaco-editor
javascript·react.js·electron
青椒大仙KI111 小时前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
^^为欢几何^^1 小时前
lodash中_.difference如何过滤数组
javascript·数据结构·算法