web前端之ES6的实用深度解构赋值方法、复杂的解构赋值

news/2024/7/10 22:57:22 标签: 前端, web, javascript, es6
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

MENU

  • 前言
  • 解构对象
  • 解构数组
  • 解构混用


前言

ES6中允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
使用解构赋值可以将复杂的代码整理的更加干净整洁。


解构对象

在没有使用解构之前,想要确定对象中的某些属性,那么就需要从对象中获取属性然后赋值给变量,这样会让代码显得非常冗余。

javascript">let obj = { name: "张三", age: 22 };
let name = obj.name;
let age = obj.age;

// 张三 22
console.log(name, age);
// 张三 22
console.log(obj.name, obj.age);

基本解构格式

如果使用解构的话,保持将变量名和对象属性名同名才可取到值。

javascript">let { name, age } = { name: "张三", age: 22 };

// 张三 22
console.log(name, age);

变量别名

如果解构的对象中,属性名和外部的变量名重名,将会报错,可以使用别名的方式进行解构。

javascript">let name = "王五";
let { name: newName, age } = { name: "张三", age: 22 };

// 张三 22
console.log(newName, age);

变量默认值

如果目标对象属性中没有要解构的属性,不指定默认值,那么将会undefined,此时可以给解构变量写默认值。

javascript">let { name, age, gender = "男" } = { name: "张三", age: 22 };

// 张三 22 男
console.log(name, age, gender);

此种为变量设置默认值的方法,常应用于函数参数中,加入调用函数时没传递参数,有可能会对函数运行造成错误。那就可以在形参位置进行对象解构,对变量指定默认值。

javascript">function fn({ name = '李四', age = 30 } = {}) {
    // 李四 30
    console.log(name, age);
}

fn();

解构数组

解构数组和对象有些不同,解构对象的时候属性前后位置不影响。但是解构数组,需要按照索引顺序解构。


数组基础解构用法

如果在没有解构之前,需要拿到数组中的前3位字符串,那么只能按照索引值的方式定义变量。

javascript">let arr = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];
let str1 = arr[0];
let str2 = arr[1];
let str3 = arr[2];

// HTML5 JavaScript Vue
console.log(str1, str2, str3);
// HTML5 JavaScript Vue
console.log(arr[0], arr[1], arr[2]);

解构赋值

javascript">let [str1, str2, str3] = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];

// HTML5 JavaScript Vue
console.log(str1, str2, str3);

基于这种特性,如果一次性想要定义多个变量,就可以使用这种解构的方式定义。相当于一次性定义了三个变量并对变量进行了赋值。


选择解构

数组的特性是按照索引值顺序执行,如果只要取得数组最后几位,或者第几位,需要预留出其他值的位置。

javascript">let [, , , value1, value2] = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];

// React NodeJS
console.log(value1, value2);

扩展运算符

在一个数组中解构,可以取得数组第一位,剩下的通过扩展运算符(展开运算符),统一放置到一个数组中。

javascript">let [value, ...other] = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];

// HTML5 ["JavaScript", "Vue", "React", "NodeJS"]
console.log(value, other);

默认值

同上面对象别名方式一致。

javascript">let [v1, v2, v3 = "Vue"] = ["HTML5", "JavaScript"];

// HTML5 JavaScript Vue
console.log(v1, v2, v3);

交换变量值

javascript">let name1 = "张三";
let name2 = "李四";

[name2, name1] = [name1, name2];

// 李四 张三
console.log(name1, name2);

解构混用

在实际开发中基本没有上面那种简单的结构,大多数都是比较复杂的数据结构。用好了解构赋值才会让代码看起来更加整洁。

javascript">let person = {
   name: "坤坤",
   age: 25,
   like: ['唱', '跳', 'rap', '篮球'],
   works: {
       music: ['Wait Wait Wait', '鸡你太美'],
       movies: ['童话二分之一', '鬼畜区常青树']
   },
   friend: ['丞丞', '大宝贝', '大黑牛']
};

传统型

javascript">let result = person.works.music[1];

// 鸡你太美
console.log(result);

浅层解构

javascript">let { works } = person;

// 鸡你太美
console.log(works.music[1]);

连续解构

javascript">let { works: { music } } = person;

// 鸡你太美
console.log(music[1]);

数组与对象混用

javascript">let { works: { music: [, result] } } = person;

// 鸡你太美
console.log(result);

解构+别名

javascript">let { works: { music: [, result], movies: newMov } } = person;

// 鸡你太美 ["童话二分之一", "鬼畜区常青树"]
console.log(result, newMov);

http://www.niftyadmin.cn/n/5346066.html

相关文章

FluentValidation在C# WPF中的应用

1. 引言 在.NET开发领域,FluentValidation以其优雅、易扩展的特性成为开发者进行属性验证的首选工具。它不仅适用于Web开发,如MVC、Web API和ASP.NET CORE,同样也能完美集成在WPF应用程序中,提供强大的数据验证功能。本文将深入探…

Spark常见问题解决-日志和排查办法

Spark日志与排查报错问题查看: https://blog.csdn.net/qq_33588730/article/details/109353336 Spark常见问题 1. org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow 原因:kryo序列化缓存空间不足。 解决方法:增加参数,--conf spark.kryos…

【知识---什么是ARM计算机架构】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言精简指令集计算机(RISC):低功耗:多种应用:多种架构:生态系统:可定制性&#…

马尔可夫预测(Python)

马尔科夫链(Markov Chains) 从一个例子入手:假设某餐厅有A,B,C三种套餐供应,每天只会是这三种中的一种,而具体是哪一种,仅取决于昨天供应的哪一种,换言之&#…

Jenkins 创建 Pipeline 项目

Jenkins 创建 Pipeline 项目 在Jenkins中创建Pipeline项目是一种更灵活和强大的方式来定义和执行持续集成和持续部署的流程。 Pipeline项目允许以代码的方式描述构建、测试、部署等一系列操作。 以下是创建Pipeline项目的基本步骤: 登录到 Jenkins: 打…

【Python】采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法(项目模板)

【Python】采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法(项目模板) gitee项目模板: 网络图像推流项目模板(采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法) 前文: 【最简改进】基于…

【Golang】下载文件请求返回

在Go语言中,使用Gin框架实现文件下载功能相对简单。以下是一个简单的示例,演示了如何使用Gin来处理文件下载请求: 首先,确保你已经安装了Gin框架。如果没有安装,可以通过以下命令安装: go get -u github.c…

Java数据判空

目录 1. 字符判空2. List 集合判空3. 数组、Map集合判空4. 对象判空 1. 字符判空 // 选用:false无字符:有空格判定为空。 if (StringUtils.isNotBlank(" ")) {System.out.println(StringUtils.isNotEmpty(" ")"isNotBlank&q…