JavaScript高级之ECMASript 7、8 、9 、10 新特性

第3章 ECMASript 7 新特性

3.1. Array.prototype.includes

Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值

3.2. 指数操作符

在ES7中引入指数运算符「 **」,用来实现幂运算,功能与 Math.pow结果相同

在这里插入图片描述

第4章 ECMASript 8 新特性

4.1. async和 await

async和 await两种语法结合可以让异步代码像同步代码一样

4.1.1. async函数

  1. async函数的返回值为 promise对象,
  2. promise对象的结果由 async函数执行的返回值决定

1)返回一个字符串:
在这里插入图片描述
2)返回的结果不是一个Promise 类型的对象:
在这里插入图片描述
3)抛出错误:
在这里插入图片描述
4)返回的结果是一个Promise对象,则函数的返回结果是成功还是失败取决于这个Promise对象的结果是成功还是失败:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.1.2. await表达式

  1. await必须写在 async函数中
  2. await右侧的表达式一般为 promise对象
  3. await返回的是 promise成功的值
  4. await的 promise失败了 , 就会抛出异常 , 需要通过 try...catch捕获处理

在这里插入图片描述
在这里插入图片描述

案例1:async 和 await 结合读取文件
在这里插入图片描述

// 引入fs模块
const fs = require('fs')
// 读取 为学
function readWeiXue() {return new Promise((resolve, reject) => {fs.readFile('../14-ES6~ES11/resources/为学.md', (err, data) => {if(err) {// 如果失败reject(err)}// 如果成功resolve(data)})})
}
// 声明一个async函数
async function main() {try {// 获取为学内容let weixue = await readWeiXue()console.log(weixue.toString())} catch(e) {console.log(e)}
}main()

案例2:async 和 await 结合发送AJAX请求
在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><title></title></head><body><script type="text/javascript">// 发送AJAX请求,返回的结果是Promise对象function sendAJAX(url) {return new Promise((resolve, reject) => {// 1. 创建对象const x = new XMLHttpRequest()// 2. 初始化x.open('GET', url)// 3. 发送x.send()// 4. 事件绑定x.onreadystatechange = function() {if(x.readyState === 4) {if(x.status >= 200 && x.status <= 300) {// 成功啦resolve(x.response)} else {// 失败reject(x.status)}}}})}// 1. promise then方法 测试sendAJAX('https://api.apiopen.top/getJoke').then(value => {console.log(value)})// 2. async 与 await 测试/* async function main() {let result = await sendAJAX('https://api.apiopen.top/getJoke')console.log(result)}main() */</script></body>
</html>

4.2. Object.values和 Object.entries

  1. Object.values()方法返回一个给定对象的所有可枚举属性值的数组
  2. Object.entries()方法返回一个给定对象自身可遍历属性 [key,value] 的数组

在这里插入图片描述

4.3. Object.getOwnPropertyDescriptors

该方法返回指定对象所有自身属性的描述对象
在这里插入图片描述

第5章 ECMASript 9 新特性

5.1. Rest/Spread属性

Rest参数与 spread扩展运算符在 ES6中已经引入,不过 ES6中只针对于数组,在 ES9中为对象提供了像数组一样的 rest参数和扩展运算符
在这里插入图片描述
在这里插入图片描述

/* Rest参数与spread扩展运算符在ES6中已经引入,不过ES6中只针对于数组,在ES9中为对象提供了像数组一样的rest参数和扩展运律符 */function connect({host, port, username, password}) {console.log(host);console.log(port);console.log(username);console.log(password)}connect({host: '127.0.0.1',port: 3306,username: 'root',password: 'root'})function connect({host, port, ...user}) {console.log(host);console.log(port);console.log(user);}connect({host: '127.0.0.1',port: 3306,username: 'root',password: 'root'})

在这里插入图片描述

5.2. 正则表达式命名捕获组

ES9允许命名捕获组使用符号 『 ?』 ,这样获取捕获结果可读性更强
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

let str = '<a href="http://www.atguigu.com">尚硅谷</a>';const reg = /<a href="(?<url>.*)">(?<text>.*)<\/a>/;const result = reg.exec(str);console.log(result.groups.url);console.log(result.groups.text);

5.3. 正则表达式反向断言

ES9支持反向断言,通过对匹配结果前面的内容进行判断,对匹配进行筛选。
在这里插入图片描述
在这里插入图片描述

//声明字符串 let str = 'JS5211314你知道么555啦啦啦';//正向断言 const reg = /\d+(?=啦)/;const result = reg.exec(str);//反向断言 const reg = /(?<=么)\d+/;const result = reg.exec(str);console.log(result);

5.4. 正则表达式 dotAll模式

正则表达式中点.匹配除回车外的任何单字符,标记 『 s』 改变这种行为,允许行终止符出现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

let str =` <ul> <li> <a>肖生克的救赎</a> <p>上映日期: 1994-09-10</p> </li> <li> <a>阿甘正传</a> <p>上映日期: 1994-07-06</p> </li> </ul>`;//声明正则 const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;//执行匹配 const result = reg.exec(str);let result;let data = [];while (result = reg.exec(str)) {data.push({title: result[1],time: result[2]});}//输出结果 console.log(data);

第6章 ECMASript 10 新特性

6.1. Object.fromEntries

把键值对数组转成了对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2. trimStart和 trimEnd

trimStart()和trimEnd() 去掉首部、尾部空格 在这里插入图片描述

在这里插入图片描述

6.3. Array.prototype.flat 与 flatMap

flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 连着深度值为1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。
在这里插入图片描述

6.4. Symbol.prototype.description

description 是一个只读属性,它会返回 Symbol 对象的可选描述的字符串
在这里插入图片描述

第7章 ECMASript 11 新特性

7.1. String.prototype.matchAll

如果一个正则表达式在字符串里面有多个匹配,现在一般使用g修饰符或y修饰符,在循环里面逐一取出。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

let str = `<ul><li><a>肖克的救赎</a><p>上映日期: 1994-09-10</p></li><li><a>阿甘正传</a><p>上映日期: 1994-07-06</p></li></ul>`// 声明正则const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/sg// 调用方法const result = str.matchAll(reg)console.log(result)for(let v of result) {console.log(v)}console.log('---------------')// const arr = [...result]// console.log(arr)

7.2. 类的私有属性

私有属性只能在类内部访问
在这里插入图片描述

7.3. Promise.allSettled

  • 接收参数为promise数组,返回promise对象,状态永远为成功

  • 始终能够得到每一个promise成功失败的结果
    在这里插入图片描述
    在这里插入图片描述

Promise.all()

返回的是promise对象,返回状态有一个失败且都失败,失败的值为数组里面失败的值
在这里插入图片描述
在这里插入图片描述

// 声明两个primiseconst p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('商品数据 - 1')}, 1000)})const p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve('商品数据 - 2')// reject('商品数据 - 2 出问题了!')}, 1000)})// 调用 allsettled()/* const result = Promise.allSettled([p1, p2])console.log(result) */// 调用all()const res = Promise.all([p1, p2])console.log(res)

总结:
什么时候用 Promise.allSettled()?在这里插入图片描述

什么时候用 Promise.all()?

  • 每一个异步任务都想得到结果(不管Promise的状态是成功还是失败)就使用Promise.allSettled()
  • 异步任务要求每个都成功才能往下执行就使用Promise.all()

7.4. 可选链操作符

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7.5. 动态 import导入

静态的import 语句用于导入由另一个模块导出的绑定。无论是否声明了 strict mode ,导入的模块都运行在严格模式下。在浏览器中,import 语句只能在声明了 type="module" 的 script 的标签中使用

此外,还有一个类似函数的动态 import(),它不需要依赖 type="module" 的script标签。
在您希望按照一定的条件或者按需加载模块的时候,动态import() 是非常有用的。而静态型的 import 是初始化加载依赖项的最优选择
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.6. globalThis对象

全局属性 globalThis 包含全局的 this 值,类似于全局对象(global object)。

  1. 浏览器中:
    在这里插入图片描述
  2. Node环境中:
    在这里插入图片描述

7.7. bigint类型

BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。
可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数BigInt()。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

swagger core 和 swagger ui 如何关联【窥探】

几个片段&#xff1a; package io.swagger.jaxrs.listing;import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils;import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.ws.rs.GET; import javax.ws.r…

vb 根据pid获取句柄_C++中避免返回指向对象内部的句柄(handles)

点蓝色字关注“CurryCoder的程序人生”微信公众号&#xff1a;CurryCoder的程序人生欢迎关注我&#xff0c;一起学习&#xff0c;一起进步!1.问题的引入假如你正在给一个应用写一个矩形类&#xff0c;这个矩形由左上角和右下角的顶点坐标表示。为了表示这两个点&#xff0c;我们…

关于MapReduce中自定义Combine类(一)

MRJobConfigpublic static fina COMBINE_CLASS_ATTR属性COMBINE_CLASS_ATTR "mapreduce.job.combine.class"————子接口&#xff08;F4&#xff09; JobContent方法getCombinerClass————子实现类 JobContextImpl实现getCombinerClass方法&#xff1a;public C…

react脚手架配置代理解决跨域问题

一、问题描述&#xff1a; 控制台报错&#xff0c;出现跨域问题 二、解决方案 配置代理&#xff1a; 第一种配置方式&#xff1a; 在package.json中追加如下配置 "proxy":"http://localhost:5000"说明&#xff1a; 优点&#xff1a;配置简单&#xff…

kstools工具是什么牌子_2020年平衡车推荐,电动平衡车哪个牌子好?老司机教你如何选购电动平衡车...

2020年平衡车推荐&#xff0c;电动平衡车哪个牌子好&#xff1f;老司机教你如何选购电动平衡车随着我国科技的发展&#xff0c;生活水平的提高&#xff0c;在很多地方都出现了电动平衡车的身影&#xff0c;人们将电动平衡车当做短距离代步的工具&#xff0c;也是非常实用的。很…

plsql 中的一些好的设置和快捷键总结

1、SQL语句字符全部大写 自认为这是个好习惯&#xff0c;信息系统的核心是数据库&#xff0c;系统出问题时最先要查的就是SQL语句&#xff0c;怎样在浩瀚的日志中快速找到那条SQL语句是件比较痛苦的事情。 SQL语句全部大写并不能彻底解决这一问题&#xff0c;但在一堆代码…

react父子组件通信案例

父组件&#xff1a;App组件 子组件&#xff1a;Search组件、List组件 案例需求&#xff1a;文本框中输入关键词&#xff0c;点击搜索按钮后&#xff0c;下方列表展示出搜索结果 实现思路&#xff1a; 子组件Search组件向父组件App传递状态&#xff08;状态包括&#xff1a;是否…

matlab画线不同颜色_怎样画线框图才有意义

我们常轻忽身边习以为常的事物&#xff0c;觉得没有必要为一些看似简单又可有可无的东西浪费时间——例如线框图。虽然没必要凡事都寻根问底&#xff0c;但当面对复杂问题时&#xff0c;脚踏实地回归基本面也许才是根本解法。本文章深入介绍程序开发界面设计中&#xff0c;最简…

react 消息订阅-发布机制(解决兄弟组件通信问题)

消息订阅-发布机制 工具库: PubSubJS下载: npm install pubsub-js --save使用: 1)import PubSub from ‘pubsub-js’ //引入 2)PubSub.subscribe(‘delete’, function(data){ }); //订阅 3)PubSub.publish(‘delete’, data) //发布消息 App组件&#xff1a; import React,…

运行Myeclipse发生这事这是怎么回事,大神们

转载于:https://www.cnblogs.com/zhuh102/p/5753616.html

非零返回怎么解决_VLOOKUP如何返回多个值?

今天我来谈谈大家最熟悉的函数&#xff0c;也是使用频率最高的函数&#xff0c;基本是每天都在使用-VLOOKUP大家都知道VLOOKUP可以根据条件&#xff0c;查找并返回满足条件对应列的值&#xff0c;但是他的设定只是只能返回第一个满足条件的值如果我们要返回满足条件的多个值&am…

Fetch发送网络请求

1. 文档 https://github.github.io/fetch/https://segmentfault.com/a/1190000003810652 2. 特点 fetch: 原生函数&#xff0c;不再使用XmlHttpRequest对象提交ajax请求老版本浏览器可能不支持 3. 相关API GET请求 fetch(url).then(function(response) {return response.…

JSX详解React的事件绑定事件参数的传递

一、认识JSX 这段element变量的声明右侧赋值的标签语法是什么呢&#xff1f; 它不是一段字符串&#xff08;因为没有使用引号包裹&#xff09;&#xff0c;它看起来是一段HTML原生&#xff0c;但是我们能在js中直接给一个变量赋值html吗&#xff1f;其实是不可以的&#xff0c…

总谐波失真计算公式_新能源汽车技术|车用轮毂电机转矩谐波协同控制策略

点击 电机与控制应用 关注我们轮毂电机因结构简单、驱动灵活的特点广泛应用于轻型电动车辆。电机运行中存在的齿槽效应、逆变器非线性效应及电流谐波等问题&#xff0c;导致电机电磁转矩波动&#xff0c;影响车辆运行的平顺性。通过电磁转矩谐波分析发现其主要成分为低阶谐波。…

React条件渲染列表渲染

一、React条件渲染 某些情况下&#xff0c;界面的内容会根据不同的情况显示不同的内容&#xff0c;或者决定是否渲染某部分内容&#xff1a; 在vue中&#xff0c;我们会通过指令来控制&#xff1a;比如v-if、v-show&#xff1b;在React中&#xff0c;所有的条件判断都和普通的J…

解决VirtualBox错误:“FATAL:No bootable medium found!”

VirtualBox错误&#xff1a;“FATAL&#xff1a;No bootable medium found!”  用VirtualBox安装系统出现这个错误的几率极高&#xff0c;因为当哥出现同样问题的时候股沟了下”FATAL&#xff1a;No bootable medium found!“出现很多内容&#xff0c;但没一个把问题解决了的…

React事件总线

通过Context主要实现的是数据的共享&#xff0c;但是在开发中如果有跨组件之间的事件传递&#xff0c;应该如何操作呢&#xff1f; 一、安装events 在Vue中我们可以通过Vue的实例&#xff0c;快速实现一个事件总线&#xff08;EventBus&#xff09;&#xff0c;来完成操作&…

React中使用ref

一、如何使用ref 在React的开发模式中&#xff0c;通常情况下不需要、也不建议直接操作DOM原生&#xff0c;但是某些特殊的情况&#xff0c;确实需要获取到DOM进行某些操作&#xff1a; 管理焦点&#xff0c;文本选择或媒体播放&#xff1b;触发强制动画&#xff1b;集成第三方…

React中的受控组件和非受控组件

一、认识受控组件 在React中&#xff0c;HTML表单的处理方式和普通的DOM元素不太一样&#xff1a;表单元素通常会保存在一些内部的state。 比如下面的HTML表单元素&#xff1a; 这个处理方式是DOM默认处理HTML表单的行为&#xff0c;在用户点击提交时会提交到某个服务器中&…

JS动画 | 用TweenMax实现收集水滴效果

之前在CodePen上接触了TweenMax, 被它能做到的酷炫效果震撼了. (文末放了5个GSAP的效果GIF) 最近要做一个"收集水滴"的动效, 于是就试用了一下TweenMax实现这个效果. 什么是TweenMax TweenMax是GSAP(GreenSock Animation Platform)创作的动画工具库. GSAP的产品除了T…