1.解构赋值可以轻松获取对象或者数组中的数据

var jsonData = {data: "111",data2: ["test","test2"],};

json中的数据就被轻松获取;

2.解构复制可以交换变量

var a=1,b=2,c=3,d=4;
[a,b,c,d]=[d,c,b,a];
console.log(a,b,c,d);

结果: a=4,b=3,c=2,d=1

赋值的过程需要保证两边的数据格式匹配

[a,b,c,d]=[d,c,b,];

d的值将为underfinded

3.对象的解构赋值

let {obj, obj2 } = { obj: "666", obj2: "888" };
console.log(obj,obj2)

结果,666,888

数组解构

让我们一起先来看数组解构的基本用法:

let [a, b, c] = [1, 2, 3] // a=1, b=2, c=3
let [d, [e], f] = [1, [2], 3] // 嵌套数组解构 d=1, e=2, f=3
let [g, ...h] = [1, 2, 3] // 数组拆分 g=1, h=[2, 3]
let [i,,j] = [1, 2, 3] // 不连续解构 i=1, j=3
let [k,l] = [1, 2, 3] // 不完全解构 k=1, l=2

对象解构

接下来再让我们一起看看对象解构的基本用法:

let {a, b} = {a: 'aaaa', b: 'bbbb'} // a='aaaa' b='bbbb'
let obj = {d: 'aaaa', e: {f: 'bbbb'}}
let {d, e:{f}} = obj // 嵌套解构 d='aaaa' f='bbbb'
let g;
(g = {g: 'aaaa'}) // 以声明变量解构 g='aaaa'
let [h, i, j, k] = 'nice' // 字符串解构 h='n' i='i' j='c' k='e'

使用场景

1.变量赋值

我们先来看最基本的使用场景:变量赋值,先来看我们在平时开发中是怎么使用es5对变量赋值的:

var data = {userName: 'aaaa', password: 123456}
var userName = data.userName
var password = data.password
console.log(userName)
console.log(password)
var data1 = ['aaaa', 123456]
var userName1 = data1[0]
var password1 = data1[1]
console.log(userName1)
console.log(password1)

上面两个例子是最简单的例子,用传统es5变量赋值,然后调用,这么写的问题就是显得代码啰嗦,明明一行可以搞定的事情非要用三行代码,来看看解构赋值是怎么干的:

const {userName, password} = {userName: 'aaaa', password: 123456}
console.log(userName)
console.log(password)
const [userName1, password1] = ['aaaa', 123456]
console.log(userName1)
console.log(password1)

相对于es5的语法是不是更加简单明了,在数据量越大用解构赋值的优势越明显

2.函数参数的定义

一般我们在定义函数的时候,如果函数有多个参数时,在es5语法中函数调用时参数必须一一对应,否则就会出现赋值错误的情况,来看一个例子:

function personInfo(name, age, address, gender) {console.log(name, age, address, gender)
}
personInfo('william', 18, 'changsha', 'man')

上面这个例子在对用户信息的时候需要传递四个参数,且需要一一对应,这样就会极易出现参数顺序传错的情况,从而导致bug,接下来来看es6解构赋值是怎么解决这个问题的:

function personInfo({name, age, address, gender}) {console.log(name, age, address, gender)
}
personInfo({gender: 'man', address: 'changsha', name: 'william', age: 18})

这么写我们只需要知道要传什么参数就行来,不需要知道参数的顺序也没问题

3.交换变量的值

在es5中我们需要交换两个变量的值需要借助临时变量的帮助,来看一个例子:

var a=1, b=2, c
c = a
a = b
b = c
console.log(a, b)

来看es6怎么实现:

let a=1, b=2;
[b, a] = [a, b]
console.log(a, b)

是不是比es5的写法更加方便呢?

4.函数的默认参数

在日常开发中,经常会有这种情况:函数的参数需要默认值,如果没有默认值在使用的时候就会报错,来看es5中是怎么做的:

function saveInfo(name, age, address, gender) {name = name || 'william'age = age || 18address = address || 'changsha'gender = gender || 'man'console.log(name, age, address, gender)
}
saveInfo()

在函数离 main先对参数做一个默认值赋值,然后再使用避免使用的过程中报错,再来看es6中的使用的方法:

function saveInfo({name= 'william', age= 18, address= 'changsha', gender= 'man'} = {}) {console.log(name, age, address, gender)
}
saveInfo()

在函数定义的时候就定义了默认参数,这样就免了后面给参数赋值默认值的过程,是不是看起来简单多了

5.提取 JSON 数据

let jsonData = {id: 42,status: "OK",data: [867, 5309]
};let { id, status, data: number } = jsonData;console.log(id, status, number);
// 42, "OK", [867, 5309]

6.遍历 Map 结构

任何部署了 Iterator 接口的对象,都可以用for...of循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。

const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');for (let [key, value] of map) {console.log(key + " is " + value);
}
// first is hello
// second is world

如果只想获取键名,或者只想获取键值,可以写成下面这样。

// 获取键名
for (let [key] of map) {// ...
}// 获取键值
for (let [,value] of map) {// ...
}

7.输入模块的指定方法

加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。

const { SourceMapConsumer, SourceNode } = require("source-map");

前端学习必备之ES6解构赋值的常见用法相关推荐

  1. ES6 解构赋值的用法笔记

    1.概念:解构赋值可以理解为对赋值运算符的一种扩展.它主要针对数组或者 对象进行模式匹配,然后对模式中的变量进行赋值. 2.特性:采用ES6解构赋值的方式可以代码的可读性更高.代码书写更加简洁.清晰. ...

  2. ES6解构赋值原理详解

    ES6解构赋值 ES6变量的解构赋值本质上是"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予匹配的右边的值,如果匹配不成功变量的值就等于undefined 数组的解构赋值 ...

  3. [OHIF-Viewers]医疗数字阅片-医学影像-es6解构赋值-const{}=-let{}=

    [OHIF-Viewers]医疗数字阅片-医学影像-es6解构赋值-const{}=-let{}= 解构赋值语法是一种 Javascript 表达式.通过解构赋值, 可以将属性/值从对象/数组中取出, ...

  4. ES6解构赋值: ES6...转为ES5的写法

    es6的特性,主要用于 数组和对象的析构 直接上问题: 因为chrome低版本(用的55版本)不支持es6...的下面这种写法, 需要转为es5写法 function calcLinePaths() ...

  5. js之删除对象中的属性——delete、es6解构赋值、自执行匿名函数

    js之删除对象中的属性--delete.es6解构赋值.自执行匿名函数 实例 const person = {name: '李世民',gender: 'male',age: 24 };// 删除目标对 ...

  6. ES6解构赋值学习总结

    ES6提供了解构赋值的方式,这样子在赋值多个变量或者进行注释时可以方便很多,不同场景下也有很多新的应用,个人常使用的有数组的解构赋值,对象的解构赋值和函数参数的解构赋值,函数参数的解构赋值之前总结过, ...

  7. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值

    1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3;//等价于var [a, b, ...

  8. ES6 解构赋值学习

    学习博客:ES6-变量的解构赋值-阮一峰 核心:按照一定模式 ,从数组和对象中提取值 数组的解构赋值,根据索引位置进行赋值 // 根据位置进行赋值 let [a, b, c] = [1, 2, 3]; ...

  9. ES6学习之 - 变量的解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring) 1. 数组的解构赋值 以前,为变量赋值,只能直接指定值. let a = 1; let b ...

最新文章

  1. C语言中二维指针,C语言中怎样区分一维指针和二维指针?
  2. 窥探当今AI芯片中的类脑模型
  3. 需要熟悉的几个调试命令:objdump/pmap/ldd/stace
  4. 导出sql文件_(一)SQL基本知识
  5. DataTable的Merge方法和添加datatable到dataset
  6. java 日期只计算年月日大小_java 日期加减天数、月数、年数的计算方式
  7. SQL*Loader 和 Data Pump
  8. [经典php视频]构建正则表达式解析网页中的图像标记img
  9. python如何屏幕截图_Python实现屏幕截图的两种方式
  10. Emmagee 不支持android7.0以上,社区努力中~
  11. golang切片的交差集
  12. GTK+的编译还真麻烦
  13. 批量图片下载器(整站下载)
  14. 贪心、动态规划:钢条切割
  15. English Learning - L3 综合练习 1 VOA-Color 2023.04.26 周三
  16. LocalDate 计算两个日期相差天数
  17. maven的settings配置文件详解
  18. 汽车以太网IOP测试之前世今生
  19. Baumer工业相机堡盟相机如何通过BGAPI SDK联合OpenCVSharp进行图像简单拼接并显示固定数量保存和持续保存(C#)
  20. Graphviz画决策树中文乱码解决

热门文章

  1. 缓存之EHCache
  2. Linux网络编程 之 IO多路复用select(八)
  3. 14.refresh操作
  4. 序列标注问题中将分类标签引入RNN网络结构的尝试
  5. NoClassDefFoundError和ClassNotFoundException
  6. 简单理解mysql事务_如何理解数据库事务中的一致性的概念?
  7. Docker相关概念与安装(Docker-CE)
  8. oracle 随笔数,Oracle数据库随笔
  9. 网页中弹出模式对话框
  10. Android学习之SQLite