ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南
创始人
2024-09-24 19:36:00
0

目录

全面掌握:JavaScript解构赋值的终极指南

一、数组解构赋值

1、基本用法

2、跳过元素

3、剩余元素

4、默认值

二、对象解构赋值

1、基本用法

2、变量重命名

3、默认值

4、嵌套解构

三、复杂的嵌套结构解构

四、函数参数解构赋值

1、对象解构作为函数参数

2、带有默认值的函数参数解构

五、解构赋值中的交换变量

六、解构赋值与遍历

1、解构数组中的对象

七、结合 rest 运算符

八、处理函数返回的对象或数组

九、实际应用中的注意事项

1、属性不存在时的情况

2、深度解构可能导致错误

十、总结


作者:watermelo37

涉及领域:Vue、SpingBoot、Docker、LLM、python等

-----------------------------------------------------------------------------------

-------温柔地对待温柔的人,包容的三观就是最大的温柔。-------

-----------------------------------------------------------------------------------

全面掌握:JavaScript解构赋值的终极指南

        解构赋值(Destructuring Assignment)是 ES6(ECMAScript 2015) 引入的一种强大且灵活的语法,允许将数组或对象中的数据提取到变量中。它可以极大地简化从复杂数据结构中获取数据的过程。在以下内容中,我将详细解释解构赋值的语法及其在实践中的应用。

一、数组解构赋值

        数组解构赋值是基于数组元素的顺序,将数组中的值依次赋值给对应的变量。

1、基本用法

const arr = [10, 20, 30];  const [a, b, c] = arr;  console.log(a); // 输出: 10 console.log(b); // 输出: 20 console.log(c); // 输出: 30 

2、跳过元素

const arr = [10, 20, 30];  const [a, , c] = arr;  console.log(a); // 输出: 10 console.log(c); // 输出: 30 

3、剩余元素

        使用剩余运算符 (...) 获取数组中的其余元素(这里要注意区分剩余运算符和拓展运算符噢)。

const arr = [10, 20, 30, 40];  const [a, ...rest] = arr;  console.log(a);    // 输出: 10 console.log(rest); // 输出: [20, 30, 40] 

4、默认值

        当解构的数组没有足够的元素时,可以为变量提供默认值。

const arr = [10];  const [a, b = 20] = arr;  console.log(a); // 输出: 10 console.log(b); // 输出: 20 

二、对象解构赋值

        对象解构赋值是基于属性名的匹配,将对象属性的值赋给变量。

1、基本用法

const obj = { name: 'Alice', age: 25 };  const { name, age } = obj;  console.log(name); // 输出: Alice console.log(age);  // 输出: 25 

2、变量重命名

        可以将对象属性的值赋给一个新的变量名。

const obj = { name: 'Alice', age: 25 };  const { name: n, age: a } = obj;  console.log(n); // 输出: Alice console.log(a); // 输出: 25 

3、默认值

        如果对象中没有该属性,可以为变量提供默认值。

const obj = { name: 'Alice' };  const { name, age = 30 } = obj;  console.log(age); // 输出: 30 

4、嵌套解构

        可以解构嵌套的对象或数组。

const obj = {   user: {     name: 'Alice',     age: 25   } };  const { user: { name, age } } = obj;  console.log(name); // 输出: Alice console.log(age);  // 输出: 25 

三、复杂的嵌套结构解构

        解构可以处理复杂的数据结构,组合使用数组和对象的解构语法。

const data = {   id: 1,   name: 'John',   locations: [     {       city: 'New York',       state: 'NY'     },     {       city: 'San Francisco',       state: 'CA'     }   ] };  const {   name,   locations: [     { city: city1 },     { city: city2 }   ] } = data;  console.log(name);   // 输出: John console.log(city1);  // 输出: New York console.log(city2);  // 输出: San Francisco 

四、函数参数解构赋值

        在函数的参数中使用解构赋值,可以使函数更具可读性,特别是当参数是对象或数组时。

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 greet({ name = 'Anonymous', age = 0 } = {}) {   console.log(`Hello, ${name}. You are ${age} years old.`); }  greet(); // 输出: Hello, Anonymous. You are 0 years old. 

五、解构赋值中的交换变量

        解构赋值可以简洁地交换两个变量的值,而不需要使用临时变量。

let a = 1; let b = 2;  [a, b] = [b, a];  console.log(a); // 输出: 2 console.log(b); // 输出: 1 

六、解构赋值与遍历

        解构赋值可以与 for-of 循环结合使用,来遍历对象或数组。

1、解构数组中的对象

const users = [   { name: 'Alice', age: 25 },   { name: 'Bob', age: 30 } ];  for (const { name, age } of users) {   console.log(`${name} is ${age} years old.`); }  // 输出: // Alice is 25 years old. // Bob is 30 years old. 

七、结合 rest 运算符

        解构赋值可以与 rest 运算符结合使用,用于提取剩余的属性。

const obj = { a: 1, b: 2, c: 3 };  const { a, ...rest } = obj;  console.log(a);    // 输出: 1 console.log(rest); // 输出: { b: 2, c: 3 } 

八、处理函数返回的对象或数组

        解构赋值可以用于处理函数返回的复杂对象或数组,使得函数调用更加简洁。

function getUserInfo() {   return {     name: 'Alice',     age: 25,     location: {       city: 'New York',       state: 'NY'     }   }; }  const {   name,   location: { city } } = getUserInfo();  console.log(name); // 输出: Alice console.log(city); // 输出: New York 

九、实际应用中的注意事项

1、属性不存在时的情况

        如果解构的对象中不存在某个属性,变量的值将是 undefined,因此使用默认值是一个好习惯。

const obj = { name: 'Alice' };  const { name, age } = obj;  console.log(age); // 输出: undefined 

2、深度解构可能导致错误

        深度嵌套的解构可能会导致 undefined 错误,因此在实际应用中要谨慎。

const obj = { name: 'Alice' };  // 错误:Cannot destructure property 'age' of 'undefined' as it is undefined. const { name, age: { year } } = obj; 

        在复杂数据结构中,务必确保数据的完整性,或为对象提供默认值。

十、总结

        解构赋值是一个强大且灵活的工具,它使得从数组和对象中提取数据变得更加简单和直观。通过掌握解构赋值的基本语法和实践,你可以写出更加简洁、可读性更强的代码。在实际项目中,解构赋值广泛应用于函数参数处理、变量交换、嵌套结构操作等场景,极大地提升了代码的灵活性和简洁度。

        只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

        更多优质内容,请关注:

        你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

        通过array.filter()实现数组的数据筛选、数据清洗和链式调用

        el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能

        极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图

        shpfile转GeoJSON且控制转化精度;如何获取GeoJSON?GeoJson结构详解

        Docker 入门全攻略:安装、操作与常用命令指南

        通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式等

        巧用Array.forEach:简化循环与增强代码可读性

        Mapbox添加行政区矢量图层、分级设色图层、自定义鼠标悬浮框、添加天地图底图等

        管理数据必备!侦听器watch用法详解

相关内容

热门资讯

密码解锁推荐安卓系统,安全与便... 手机锁屏密码又忘了?别急,我来给你支招! 在这个信息爆炸的时代,手机已经成了我们生活中不可或缺的好伙...
2012安卓定制系统吗,创新与... 你有没有想过,手机里的安卓系统其实就像是个大厨,每个品牌都给它加上了自己的秘制调料,让这个原本平淡无...
改安卓车机系统,智能驾驶体验新... 你有没有发现,你的车机系统有点儿“老态龙钟”了?别急,今天就来给你支个招儿,让你的安卓车机系统焕然一...
迁移系统和安卓拍照,深入解析安... 你的安卓拍照,新手机也能轻松“搬家”!想象你手中握着一部充满回忆的安卓手机,里面存满了珍贵的照片和视...
蒙鸿系统安卓套装,开启全场景智... 你有没有听说最近华为的新花样?没错,就是那个让所有人都眼前一亮的蒙鸿系统安卓套装!想象你的手机、平板...
安卓系统打印有重影,安卓系统打... 你有没有遇到过这种情况:手机上的照片打印出来,竟然出现了重影?别急,今天就来给你揭秘安卓系统打印重影...
删除安卓系统无用文件,识别与删... 手机里的文件越来越多,是不是感觉像是在跟你的手机谈恋爱,它总是给你带来“惊喜”?不过,别高兴得太早,...
原生安卓双系统安装,PC实现W... 哇塞,你有没有想过,你的电脑不仅能装Windows,还能装个安卓系统?没错,就是那个让你手机里各种A...
安卓系统音量限制,功能、设置与... 手机音量总是不够大?是不是觉得在嘈杂的环境里,手机那点声音简直就像蚊子嗡嗡?别急,今天就来和你聊聊安...
安卓系统吃鸡最低,轻松畅玩绝地... 你有没有想过,在安卓手机上玩《绝地求生》这种大型游戏,到底需要多强大的配置呢?别急,今天就来给你揭秘...
安卓车载系统设置失灵,诊断与修... 亲爱的车主朋友们,你们的车载系统是不是也闹起了小脾气,设置失灵了呢?别急,今天就来给大家详细解析一下...
cf安卓系统能变苹果系统吗,跨... 你有没有想过,有一天你的《穿越火线》账号从安卓系统华丽转身,变成苹果系统的小公主呢?这可不是天方夜谭...
远程连接到安卓系统,安卓系统远... 你有没有想过,你的手机和电脑之间也能来个亲密接触呢?没错,就是那种远程连接到安卓系统的小把戏。想象你...
安卓系统可加字体吗,个性化你的... 你有没有想过,你的安卓手机字体是不是也太单调了点?别急,让我来告诉你一个秘密:安卓系统可是可以加字体...
人脸识别门锁安卓系统,安全便捷... 你有没有想过,家门钥匙的使命即将迎来一场革命?没错,就是人脸识别门锁,而且它现在可是安卓系统下的新宠...
安卓系统渗透黑产,技术手段、攻... 你知道吗?在互联网的海洋里,总有一些“海盗”在暗中游弋,他们就是那些擅长在安卓系统上搞渗透的黑产分子...
安卓系统能用的ai,探索智能生... 哇塞,你知道吗?安卓系统最近可是大变身,不仅变得超级流畅,还加入了好多酷炫的AI功能,简直让人爱不释...
iOS系统架构和安卓系统架构,... 亲爱的读者们,你是否曾好奇过,那些我们每天离不开的智能手机,它们的“大脑”——iOS系统和安卓系统,...
手机安卓系统测距软件,实用工具... 你知道吗?现在手机的功能可真是越来越强大了,连测量距离这种事情都能轻松搞定!没错,就是那个我们每天都...
安卓系统广告费,广告费如何影响... 你有没有发现,现在手机上的广告真是无处不在啊!尤其是安卓系统,广告费竟然这么贵,让人不禁想问:这安卓...