第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()。


JavaScript高级之ECMASript 7、8 、9 、10 新特性相关推荐

  1. C# 10 新特性 —— 补充篇

    C# 10 新特性 -- 补充篇 Intro 前面已经写了几篇文章介绍 C# 10 新特性的文章,还有一些小的更新 Constant interpolated strings 在之前的版本中,如果想要 ...

  2. C# 10 新特性 —— 插值字符串优化

    C# 10 新特性 -- 插值字符串优化 Intro 字符串应该是我们平时使用的最多的一个类型,从 C# 6 开始我们开始支持了插值字符串,使得我们可以更方便的进行字符串的操作,现在很多分析器也推荐我 ...

  3. C# 10 新特性 —— Lambda 优化

    C# 10 新特性 -- Lambda 优化 Intro C# 10 对于 Lambda 做了很多的优化,我们可以在 C# 中更加方便地使用委托和 Lambda 了,下面就来看一些示例 Lambda ...

  4. C# 10 新特性 —— CallerArgumentExpression

    C# 10 新特性 -- CallerArgumentExpression Intro C# 10 支持使用 CallerArgumentExpression 来自动地获取调用方的信息,这可以简化我们 ...

  5. C# 10 新特性 —— 命名空间的变化

    C# 10 新特性 -- 命名空间的变化 Intro C# 10 针对命名空间做了一些改变,主要是 Global Usings 和 File-scoped Namespace,我们前面分享的示例其实也 ...

  6. JDK 5 ~ 10 新特性倾情整理

    转载自 JDK 5 ~ 10 新特性倾情整理 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对 ...

  7. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  8. Java 10 新特性概述

    Java 10是其23年历史中最快发布的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这个概念.Java 10是一个具有许多未来变化的版本,其范围和影响可能并不明显, ...

  9. Python3.10新特性初体验

    Python3.10新特性初体验 注:图片来源 目录 结构模式匹配 [PEP 635] union类型允许X | Y [PEP 604] 带圆括号的上下文管理器 一.结构模式匹配(新增PEP 635) ...

最新文章

  1. Java Random()函数生成指定范围的随机数
  2. 激光雷达模块支持提高高速公路速度
  3. 普通程序员和优秀程序员的距离究竟有多大?
  4. scrapy下载中间件设置代理和useraget大全
  5. PHP中几种加密形式
  6. zTree菜单的排序
  7. tar解压出错:gzip: stdin: unexpected end of file的解决
  8. 编程三角形面积公式_三角形面积公式110式(英文版)
  9. c++ 跳转到上级目录_Windows漏洞利用开发 第4部分:使用跳转定位Shellcode 模块
  10. android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性
  11. 1380C. Create The Teams
  12. 编写JAVA脚本的JSP页面
  13. 软件需求分析--结构化分析(SA)方法[1]
  14. linux多播 多个接收方,在同一端口上接收多个多播源 – C,Linux
  15. 简单的关闭iframe窗口和获取父页面元素
  16. matlab 阶乘函数
  17. 利用数据泵导入导出dmp
  18. 阿里云数据库RDS如何监控、备份及克隆实例?
  19. JS--页面加载完毕后执行
  20. Windows如何彻底删除.sys后缀的流氓文件

热门文章

  1. 什么材料反射热量好_封阳台用什么材料好,封阳台用什么玻璃好
  2. axios vue 回调函数_vue中ajax请求与axios包完美处理
  3. MySQL 之 索引
  4. Goland安装-工欲善其事必先利其器
  5. 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...
  6. python 爬取大乐透开奖结果
  7. 非法操作 login.php,阅文游戏中心 h5游戏接入wiki
  8. 学习笔记=《你不知道的JavaScript(上卷)》第三章:函数作用域和块级作用域...
  9. ES6 数组、对象的扩展
  10. Nginx 作为 WebSockets 代理