es6 快速入门 系列 —— 解构
其他章节请看:
解构
我们经常使用数组或对象存储数据,然后从中提取出相关数据信息
试图解决的问题
以前开发者为了从对象或数组中提取出特定数据并赋值给变量,编写了很多重复的代码,就像这样:
function demo1(obj){
let key1 = obj.key1
let key2 = obj.key2
let key3 = obj.key3
let key4 = obj.key4
// 使用key1,key2,key3,key4变量,做进一步操作
}
demo1({
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
})
解决的方法
es6引入新特性:解构。来解决上面的问题,请看下面:
function demo1({key1, key2, key3, key4}){
console.log(key2) // value2
// 使用key1,key2,key3,key4变量,做进一步操作
}
demo1({
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
})
可以把解构简单理解成赋值
更详细的介绍请看下面补充部分
补充
对象解构
对象解构的语法:在赋值操作符左边放置一个对象字面量
声明变量时使用解构
let obj = {
key1: 'value1',
key2: 'value2'
}
let {key1, key2} = obj
console.log(key1) // value1
不要忘记初始化
// 语法错误
var {key1, key2}
// 语法错误
let {key1, key2}
变量赋值时使用解构
let obj = {
key1: 'value1',
key2: 'value2'
}
let key1 = '11';
// 一定要用小括号包裹赋值语句。否则js引擎将{}是为代码块,而代码块不允许出现在赋值语句的左侧
({key1} = obj)
console.log(key1) // value1
解构时的默认值
let obj = {
key1: 'value1',
key2: 'value2',
key5: undefined
}
let {key1, key2, key3, key4 = 'value4', key5 = 'value5'} = obj
console.log(key2) // value2
console.log(key3) // undefined 该变量名在obj中不存在,则赋值undefined
console.log(key4) // value4 对应的属性不存在,使用默认值
console.log(key5) // value5 对应属性值为undefined,使用默认值
非同名变量赋值
let obj = {
key1: 'value1'
}
let {key1: v1, key2: v2 = 'value5'} = obj
console.log(v1) // value1
console.log(v2) // value5
嵌套对象的解构
let obj = {
loc: {
key1: 'value1',
}
}
let {loc: {key1, key2, key3 = 'value3'}} = obj;
console.log(key1) // value1
console.log(key2) // undefined
console.log(key3) // value3
数组解构
数组解构语法:与对象解构语法相比要简单多了,使用的是数组字面量
声明变量时使用解构
let arr = ['value1', 'value2', 'value3', 'value4', 'value5']
let [,,key3,key4,key5] = arr
console.log(key3) // value3 逗号是占位符
console.log(key5) // value5
不要忘记初始化
// 语法错误
let [,,key3,key4,key5]
变量赋值时使用解构
不需要用小括号包裹表达式,这一点与对象解构不同
let arr = ['value1', 'value2']
let key1, key2;
[key1, key2] = arr
console.log(key1) // value1
数组解构有一个独特用法:交换两个变量的值
let key1 = 'value1';
let key2 = 'value2';
[key1, key2] = [key2, key1];
console.log(key1) // value2
console.log(key2) // value1
解构时的默认值
let arr = ['value1']
let [key1, key2 = 'value2'] = arr
console.log(key2) // value2
嵌套数组的解构
let arr = ['value1', ['value2', 'value3'], 'value4']
let [key1,[key2],key4] = arr
console.log(key2) // value2
console.log(key4) // value4
不定元素
前面我们介绍了不定参数,而在数组解构语法中有一个与之类似的概念:不定元素。在数组中,可以通过三个点(...)的语法将数组中的其余元素赋值给一个特定的变量,就像这样:
let arr = ['value1', 'value2', 'value3', 'value4']
let [key1, ...restKeys] = arr
console.log(key1) // value1
console.log(restKeys.length) // 3
console.log(restKeys[0]) // value2
注:与不定参数一样,不定元素也必须是最后一个
可以使用不定元素克隆数组
let arr = ['value1', 'value2']
let [...copy] = arr
console.log(Array.isArray(copy)) // true
console.log(copy[1]) // value2
解构参数
解构参数必须传值
function demo(key1, {key2, key3}){
console.log(key2) // value2
}
// 正确
demo('value1', {key2: 'value2'})
// 报错
demo('value1')
当调用 demo('value1') 时,js引擎实际上做了这些事:
function demo(key1, options){
let {key2, key3} = options
}
如果需要让解构参数可选,必须为其提供默认值
function demo(key1, {key2, key3} = {}){
console.log(key2) // undefined
}
// 正确
demo('value1')
下面这种写法,让解构参数支持可选,并且能提供默认值:
function demo(key1, {key2 = 'value2', key3 = 'value3'} = {}){
console.log(key2)
}
demo('value1') // value2 解构参数支持可选
demo('value1', {}) // value2
demo('value1', {key2: 'value20'}) // value20
demo('value1', {key3: 'value30'}) // value2
其他章节请看:
es6 快速入门 系列 —— 解构的更多相关文章
- es6 快速入门 系列 —— 变量声明:let和const
其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...
- es6 快速入门 系列 —— promise
其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...
- es6快速入门 系列 - async
其他章节请看: es6 快速入门 系列 async 前文我们已经知道 promise 是一种异步编程的选择.而 async 是一种用于执行异步任务更简单的语法. Tip:建议学完 Promise 在看 ...
- es6 快速入门 系列 —— 类 (class)
其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...
- es6 快速入门 系列 —— 对象
其他章节请看: es6 快速入门 系列 对象 试图解决的问题 写法繁杂 属性初始值需要重复写 function createPeople(name, age){ // name 和 age 都写了 2 ...
- es6 快速入门 系列
es6 快速入门(未完结,持续更新中...) 前言 为什么要学习es6 es6对于所有javaScript开发者来说,非常重要 未来,es6将构成javaScript应用程序的基础 es6中很多特性, ...
- es6 快速入门 —— 函数
其他章节请看: es6 快速入门 系列 函数 函数是所有编程语言的重要组成部分,es6之前函数语法一直没什么变化,遗留了许多问题,javaScript开发者多年来不断抱怨,es6终于决定大力度更新函数 ...
- python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)
BBS项目内容回顾 1. 登陆页面 1. 验证码 1. PIL(Pillow) 2. io 2. ORM 1. 增删改查 3. AJAX $.ajax({ url: '', type: '', dat ...
- ES6快速入门(二)数据结构
ES6快速入门 一.解构 1. 对象解构 let person = { name: 'Tang', age: 28 }; //必须同名,必须初始化 let {name, age} = person; ...
- vue 快速入门 系列 —— 实例方法(或 property)和静态方法
其他章节请看: vue 快速入门 系列 实例方法(或 property)和静态方法 在 Vue(自身) 项目结构 一文中,我们研究了 vue 项目自身构建过程,也知晓了 import Vue from ...
随机推荐
- Angular系列教程之观察者模式和RxJS
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 用C# WPF简单实现仪表控件
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- vscode - Prettier插件 统一代码风格规范,保存自动格式化代码
安装 Prettier - Code formatter prettier安装完毕,使用shift+alt+f就可格式化代码. 如果需要自动保存,要在系统设置中增加"editor.forma ...
- Asp.Net core 自定义 appsettings.json 文件路径
builder.Host.ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("d:/ ...
- [转帖]Nginx 安全优化
目录 前言 1.使用 SSL/TLS 证书 2.使用安全密钥交换机制 3.禁用旧的 SSL/TLS 协议 4.禁用 SSL/TLS 弱密码套件 5.禁用不需要的 HTTP 方法 6.防止缓冲区溢出攻击 ...
- 汉字在unicode的编码情况-From http://yedict.com/zsts.htm
字符集内容 字数 unicode编码 字符显示说明(除非安装更大字库) 基本区 分页: 一 二 三 四 共20902字 4E00-9FA5 电脑和手机都能显示 基本区补充 共90字 9FA6-9F ...
- [转帖]Strong crypto defaults in RHEL 8 and deprecation of weak crypto algorithms
https://access.redhat.com/articles/3642912 TABLE OF CONTENTS What policies are provided? Removed c ...
- [转帖]Linux命令(51)——ipcs命令
https://cloud.tencent.com/developer/article/1380589 1.命令简介 ipcs命令用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表.共享 ...
- [转帖]jmeter线程组与循环次数的区别
在压测的时候,有些接口需要携带登录信息,但是我们只想登录一次,然后其他接口进行多用户压测,此时你会怎么办?用仅一次控制器实现吗?下面我们来看看用仅一次控制器能不能实现 压测时jmeter中的线程数是模 ...
- [转帖]Jmeter脚本录制:Jmeter5.0脚本录制
第一部分进行jmeter设置 第一步:在JMeter中添加线程组 第二步:在线程组下添加HTTP请求默认值 添加->配置元件->HTTP请求默认值,设置服务器IP和端口号 第三步:在线程组 ...