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

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

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

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

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);
1
2
3
4
5
6
7
8
基本解构格式

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

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

// 张三 22
console.log(name, age);
1
2
3
4
变量别名

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

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

// 张三 22
console.log(newName, age);
1
2
3
4
5
变量默认值

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

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

// 张三 22 男
console.log(name, age, gender);
1
2
3
4
此种为变量设置默认值的方法,常应用于函数参数中,加入调用函数时没传递参数,有可能会对函数运行造成错误。那就可以在形参位置进行对象解构,对变量指定默认值。

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

fn();
1
2
3
4
5
6
解构数组
解构数组和对象有些不同,解构对象的时候属性前后位置不影响。但是解构数组,需要按照索引顺序解构。

数组基础解构用法

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

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]);
1
2
3
4
5
6
7
8
9
解构赋值

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

// HTML5 JavaScript Vue
console.log(str1, str2, str3);
1
2
3
4
基于这种特性,如果一次性想要定义多个变量,就可以使用这种解构的方式定义。相当于一次性定义了三个变量并对变量进行了赋值。

选择解构

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

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

// React NodeJS
console.log(value1, value2);
1
2
3
4
扩展运算符

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

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

// HTML5 ["JavaScript", "Vue", "React", "NodeJS"]
console.log(value, other);
1
2
3
4
默认值

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

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

// HTML5 JavaScript Vue
console.log(v1, v2, v3);
1
2
3
4
交换变量值

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

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

// 李四 张三
console.log(name1, name2);
1
2
3
4
5
6
7
解构混用
在实际开发中基本没有上面那种简单的结构,大多数都是比较复杂的数据结构。用好了解构赋值才会让代码看起来更加整洁。

let person = {
name: "坤坤",
age: 25,
like: ['唱', '跳', 'rap', '篮球'],
works: {
music: ['Wait Wait Wait', '鸡你太美'],
movies: ['童话二分之一', '鬼畜区常青树']
},
friend: ['丞丞', '大宝贝', '大黑牛']
};
1
2
3
4
5
6
7
8
9
10
传统型

let result = person.works.music[1];

// 鸡你太美
console.log(result);
1
2
3
4
浅层解构

let { works } = person;

// 鸡你太美
console.log(works.music[1]);
1
2
3
4
连续解构

let { works: { music } } = person;

// 鸡你太美
console.log(music[1]);
1
2
3
4
数组与对象混用

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

// 鸡你太美
console.log(result);
1
2
3
4
解构+别名

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

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

相关文章
|
17天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
18天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
19天前
|
编解码 前端开发 JavaScript
Web 前端开发中的最佳实践
本文将介绍 Web 前端开发中的最佳实践,包括代码组织、性能优化、响应式设计和用户体验等方面。通过遵循这些实践,开发人员可以提高开发效率,优化用户体验,并减少潜在的问题和错误。
|
1天前
|
JavaScript 前端开发 API
Node.js在前端的妙用:打造更出色的Web体验
Node.js在前端的妙用:打造更出色的Web体验
16 5
|
1天前
|
前端开发 JavaScript Go
构建高性能Web应用:优化前端资源加载
在构建现代Web应用时,优化前端资源加载是至关重要的一步。本文将介绍一些提升Web应用性能的关键策略,包括减少HTTP请求、压缩和合并资源、使用CDN加速、以及异步加载技术等。通过实施这些优化策略,开发人员可以显著提升网站的加载速度和用户体验。
|
1天前
|
前端开发 JavaScript UED
Web前端开发:探索技术与艺术的交融
Web前端开发:探索技术与艺术的交融
8 1
|
2天前
|
前端开发 JavaScript Java
前端与后端:构建现代Web应用的双翼
前端与后端:构建现代Web应用的双翼
|
11天前
|
前端开发 搜索推荐 数据安全/隐私保护
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
18 1
|
12天前
|
前端开发 JavaScript vr&ar
前端新技术探索:WebAssembly、Web Components与WebVR/AR
【4月更文挑战第12天】WebAssembly、Web Components和WebVR/AR正重塑Web应用的未来。WebAssembly允许C/C++等语言在Web上高效运行,提供接近原生的性能,如游戏引擎。Web Components通过Custom Elements和Shadow DOM实现可复用的自定义UI组件,提升模块化开发。WebVR/AR(现WebXR)则让VR/AR体验无需额外应用,直接在浏览器中实现。掌握这些技术对前端开发者至关重要。
16 3
|
1月前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。