globalThis 对象

JavaScript运行环境中,存在一个顶层对象,即是全局运行环境(全局作用域),在browser环境下,顶层对象指向window,在node环境下,顶层对象指向global,在Web Worker中,顶层对象又指向self。而这个顶层对象我们常常又使其与this挂钩,一般默认使用this变量即可获得该顶层变量。但由于thisJavaScript中又是一个很复杂的变量。因为this在不同的执行上下文中指向不一,使其在获取顶层对象具有局限性。如在模块中,this指向该模块;严格模式运行的函数thisundefined。因此,出现很多垫片函数获取全局的对象,我们最熟悉的是如下获取顶层对象的方法。

function getGloablThis() {if (typeof self !== 'undefined') { return self; }if (typeof window !== 'undefined') { return window; }if (typeof global !== 'undefined') { return global; }throw new Error('unable to locate global object');
}

ES2020中,提供了globalThis对象作为标准化的方式获取顶层对象。但目前由于浏览器支持情况的差异在使用时,可能需要垫片函数(如global-this)。

// chrome 中打印 glbalThis 对象
console.dir(globalThis)

输出结果如下:

新数据类型 bigint

在面试中我们经常会遇到0.1 + 0.2 !== 0.3,这是为什么,又如何使其相等。当然了我们并不是为了解决这个问题才引入新的数据类型。我们知道JavaScript中数字都是采用64位进行存储的,因此其是有精度有范围的。这也是为什么0.1 + 0.2 !== 0.3,而且范围仅在Number.MIN_SAFE_INTEGER(9007199254740991)``Number.MAX_SAFE_INTEGER(-9007199254740991)之间可使用,因此,在一定的使用场景中是十分首先。为此,ES2020引入了一种新的数据类型bigint

const big = 123456789n;
typeof big; // bigint

bigint使用也比较简单就是在数据后面加上n表示其是bigint类型的数据。与Number类似,ES2020也提供了原生的BigInt构造函数,用于将其他类型数据转换成bigint数据。

const big = BigInt(Number.MAX_SAFE_INTEGER) // 9007199254740991n

Promise.allSettled

Promise.all在执行并发异步任务是,只有所有的Promise都是fulfilled状态时,其才是fulfilled状态,只要有一个并发的Promiserejected,其状态就是rejected的。而这常常无法满足我们的业务场景,比如,我们使用Promise.all并发的请求三个没有关联的API接口获取数据,不能因为其中一个接口报错,而无法返回其他接口的数据,这是不合理的。因此,ES2020引入Promise.allSettledPromise.allSettled方法接受一组Promise实例作为参数,包装成一个新的Promise实例。在进行并发处理时,不管其中入参Promise实例状态如何,只要所有的Promise实例都是完结状态,其就返回所有的实例结果数据无论其是fulfilledrejected

const promises = [fetch('index.html'),fetch('index.js'),fetch('index.css')
]
const promiseallSettled = Promise.allSettled(promises);
promiseallSettled.then(res => {const successRes = res.filter(item => item.status === 'fulfilled');const errorRes = res.filter(item => item.status === 'rejected');return {successRes, errorRes};
})

String.prototype.matchAll

ES2020增加了String.prototype.matchAll方法,一次性取出所有匹配,返回一个遍历器(Iterator)。

const source = 'this is test1 test2 test3!';
const reg = /test(\d)/g;for (const match of source.matchAll(reg)) {console.log(match);
}

输出结果如下:

可选链

在实际开发中,我们常常会读取对象内部的某个属性,但我们需要做前置检查,判断该对象是否存在,如果需要查询具有多层级的对象时,这种检查就更复杂。

const userName = user && user.detail && user.detail.name;

或者使用三元运算符

const userName = user ? (user.detail ? user.detail.name : '') : '';

这种层层判断非常的麻烦, ES2020引入了“链判断运算符”(optional chaining operator)?.,简化上面的操作,不再需要进行冗余的各种前置校验。

const userName = user?.detail?.name;

使用了?.运算符时,当左侧的对象为null或undefined就不再往下运算,而是返回undefined

空值合并

在实际开发场景中,我们经常遇到为变量指定一个默认值的情况。有时我们的意愿常常是当某个属性的值是nullundefined时,默认值才生效。但实际情况是经常是当值为falsy(faly值 (虚值) 是在Boolean上下文中认定为false的值)值时默认值就生效,而不仅仅只有nullundefined时生效。

const userName = name || 'testName';
// 当name为faly时,默认值就生效了

ES2020引入??运算符。只有运算符左侧的值为nullundefined时,才会返回右侧的值。

const userName = name ?? 'testName';

??运算符与?.运算符配合使用,可以为nullundefined的值设置默认值。

const userName = user?.detail?.name ?? 'testName';

ES2020新增功能相关推荐

  1. 服务器创建和附加虚拟磁盘,Windows 7 虚拟硬盘中的新增功能

    [IT168 专稿]Microsoft 虚拟硬盘文件格式 (.vhd) 是一种公用格式规范,用于指定封装在单个文件中的虚拟硬盘,它能够承载本机文件系统并支持标准的磁盘操作. Microsoft Win ...

  2. Microsoft Dynamics AX 2009 新增功能 – 应用(目录)

    PDF 下载链接 第 1 章:新增常规功能 用户界面更新 角色中心 工作流 Contoso 演示数据集 第 2 章:财务 填充实用程序 过帐限制 原因代码 自动分摊 – 总帐 冲销分录 – 总帐 预算 ...

  3. android studio 前言中不允许有内容_Android Studio 中 System Trace 的新增功能

    在 Android Studio 4.0 中,我们已经对 CPU Profiler 的 UI 做了大量调整来提供更加直观的工作流记录,而在 Android Studio 4.1 中,我们基于开发者们的 ...

  4. Nmap 7.70新增功能——扫描主机所有IP

     Nmap 7.70新增功能--扫描主机所有IP 有时,一个主机可能存在多个IP地址,如网站服务器.用户可以使用nmap提供的--resolve-all选项进行扫描.其语法格式如下: nmap --r ...

  5. Hydra 8.4/8.5新增功能

    Hydra 8.4/8.5新增功能 Kali Linux 2017.1自带的Hydra为8.3,现在Hydra升级到8.5,新增以下功能. (1)为输出文件选项-o,添加一个配套选项-b,允许将验证的 ...

  6. C# 9.0中的新增功能 - 译

    https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9 What's new in C# 9.0 C# 9.0中的新增功能 ...

  7. 华为5ipro详细参数使用功能_详细讲解双计双控智能电表技术参数以及新增功能优势...

    双计双控智能电表(升级版)是一款具有两路计量两路控制智能费控功能的电表,相当于两台智能电表组合成一台智能电表.它采用微电子技术研制的新型电度表,该表具有高精度计量.智能费控.自动结算电费.恶性负载识别 ...

  8. 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能...

    原文:与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 [源码下载] 与众不同 windows phone (40 ...

  9. ABP Framework 5.2 RC 版本发布及新增功能介绍

    本文将介绍 ABP Framework 5.2 RC 版新增的主要功能: •单层解决方案模板•API 版本控制•源代码控制移除libs文件夹•对 Swagger UI 隐藏 ABP 默认端点•CMS ...

最新文章

  1. MySQL数据库相关命令
  2. 国内35所人工智能学院大盘点
  3. 中根遍历二叉查找树所得序列一定是有序序列_二叉搜索树(BST)
  4. 如果科学家封神,会有什么称号?
  5. DOM BOM document window 区别
  6. Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了
  7. Basic4android v3.50 发布
  8. 最优化学习笔记(九)——基本的共轭方向算法
  9. metal分析是什么意思_GWAS数据如何做meta分析?
  10. IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏
  11. Win10 Ubuntu 制作多系统U盘
  12. 面试时候被问到为什么离职 离职原因 该如何回答?
  13. 微软家庭服务器,微软下一代Windows家庭服务器Vail初印象
  14. 塑料件设计-筋厚度与主体壁厚的关系
  15. 获取空气质量站点数据 城市数据 日数据 时数据
  16. php验证码手册,验证码_专题_帮助文档_Thinkphp手册
  17. ChatGPT 侦探推理小说《神秘失踪》
  18. Xcode运行报错The operation couldn’t be completed.
  19. 对于计算机学科的认识和一些感想
  20. 量子计算机科学家,再破纪录!中国科学家实现18个量子比特纠缠 为量子计算机奠基...

热门文章

  1. CC2530学习光敏传感器
  2. 自主实现小型的http服务器
  3. 赛迪数据丨2018年全球区块链市场规模达到122.6亿元
  4. 快速入门丨篇三:如何进行运动控制器ZPLC程序开发?
  5. 默纳克服务器显示乱码,默纳克服务器如何查故障
  6. 蓝桥杯嵌入式(包括G431)资源分享
  7. useradd命令创建用户
  8. 2020-03-12 万达信息一面
  9. C语言-初始C语言(一)
  10. 半年多过去了,还记得影响力是怎么炼成的?