项目中关于解构的常用用法,我都帮你整理好了
作者:Ruphaa
译者:前端小智
来源:dev
有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。【项目中关于解构的常用用法,我都帮你整理好了】在本文串,你将学到所有你需要知道的 JS 解构知识点。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
为什么 JS 中存在解构?
这是一个普通的对象,包含4个人的名字。
const names = {
taylor: '小智',
shawn: '前端小智',
zayn: '大志',
halsey: '王大志',
}
现在,如果让你手动打印所有人名到控制台,你会怎么做。可能会这样做:
console.log(names.taylor)
console.log(names.shawn)
console.log(names.zayn)
console.log(names.halsey)
这种点的方式有点烦人,怎样才能让它变得更好?
const taylor = names.taylor
const shawn = names.shawn
const zayn = names.zayn
const halsey = names.halseyconsole.log(taylor)
console.log(shawn)
console.log(zayn)
console.log(halsey)
好多了。但我们仍然在重复同样的工作。如果我们可以在单个变量上声明和分配对象属性呢?
这样会更好,对吧?这就是对象解构帮助我们的地方。所以我们可以这样做:
const { taylor, shawn, zayn, halsey} = namesconsole.log(taylor)
console.log(shawn)
console.log(zayn)
console.log(halsey)
这比以前好多了。
它是如何工作的呢?
这很简单。我们只是从对象中取出属性并将它们存储在一个变量中。默认情况下,变量名与属性名相同。所以我们可以这样写:
const { taylor, shawn, zayn: zaynMalik, halsey} = names
数组解构?
数组解构与对象的解构类似,但有一些区别。我们知道数据被存储在一个带有索引的数组中。它们是有顺序的。因此,在进行解构时,我们必须保持顺序。比如:
const albums = ['Lover', 'Evermore', 'Red', 'Fearless']const [lover, ever] = albums
// Lover Evermore
而且,数组也没有值的属性。所以,可以直接给出你想要的任何变量名称。
我们继续看看对象和数组解构的一些用例。
数组解构
交换变量
let a = 1;
let b = 3;
[a, b] = [b, a];
console.log(a);
// 3
console.log(b);
// 1
忽略一些返回值
function f() {
return [1, 2, 3];
}const [a, , b] = f();
console.log(a);
// 1
console.log(b);
// 3
默认值
let a, b;
[a=5, b=7] = [1];
console.log(a);
// 1
console.log(b);
// 7
用 Rest 参数创建子数组
const albums = ['Lover', 'Evermore', 'Red', 'Fearless']const [, ...albums2] = albumsconsole.log(albums2) // ['Evermore', 'Red', 'Fearless']
对象解构
从作为函数参数传递的对象中解构字段
const anjan = {
name: '前端小智', age: 20
}const statement = ({name, age}) => {
return `My name is ${name}. I am ${age} years old.`
}statement(anjan)
// My name is 前端小智. I am 20 years old.
嵌套对象解构
const profile= {
name: 'Anjan',
age: 20,
professional: {
profession: '前端开发',
}
}const {name, age, professional: {profession}} = profileconsole.log(professional) // 这句会报错
console.log(profession) // 前端开发
默认值
const {a = 10, b = 5} = {a: 3};
console.log(a);
// 3
console.log(b);
// 5
嵌套对象和数组解构
const taylor = {
name: 'Taylor Swift',
age: 31,
address: {
city: 'New York',
country: 'USA',
},
albums: ['Lover', 'Evermore', 'Red', 'Fearless'],
}const {
name,
age,
address: { city },
albums: [lover, ...rest],
} = taylorconsole.log(name) // Taylor Swift
console.log(age) // 31
console.log(city) // New York
console.log(lover) // Lover
console.log(rest) // [ 'Evermore', 'Red', 'Fearless' ]
这就是关于 JS 所有你需要知道的 JS 解构知识点。
编辑中可能存在的bug没法实时知道,事后为了解决这些bug,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
原文:https://dev.to/thatanjan/ever...
交流
有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
文章图片
推荐阅读
- 赢在人生六项精进二阶Day3复盘
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 醒不来的梦
- 关于自我为中心的一点感想
- 六项精进20180530
- 2020-12(完成事项)
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 17|17 关山松 第二课作业#公众号项目# D20
- RxJava|RxJava 在Android项目中的使用(一)