概述

ECMAScript2020于2020年6月正式发布, 本文会介绍ECMAScript2020(ES11),即ECMAScript的第11个版本的新特性。

以下摘自官网:ecma-262

ECMAScript 2020, the 11th edition, introduced the matchAll method for Strings, to produce an iterator for all match objects generated by a global regular expression; import(), a syntax to asynchronously import Modules with a dynamic specifier; BigInt, a new number primitive for working with arbitrary precision integers; Promise.allSettled, a new Promise combinator that does not short-circuit; globalThis, a universal way to access the global this value; dedicated export * as ns from ‘module’ syntax for use within modules; increased standardization of for-in enumeration order; import.meta, a host-populated object available in Modules that may contain contextual information about the Module; as well as adding two new syntax features to improve working with “nullish” values (undefined or null): nullish coalescing, a value selection operator; and optional chaining, a property access and function invocation operator that short-circuits if the value to access/invoke is nullish.

ECMAScript2020(ES11)

ES2020的新特性如下:

  • 动态导入 (Dynamic Import)
  • BigInt大整数类型
  • Promise.allSettled
  • String.matchAll
  • globalThis
  • import.meta
  • 模块命名空间导出
  • for-in循环枚举标准化
  • 其它

动态导入 import语法

ES2020增强了import语法,用于动态导入模块,允许在运行时按需导入,返回一个Promise,适用于懒加载。

// 传统静态导入(必须位于文件顶部)
// import { sum } from './math.js';// 动态导入(按需加载)
async function loadMathModule() {const mathModule = await import('./math.js');console.log(mathModule.sum(1, 2)); // 3
}// 条件加载示例
if (needFeatureX) {import('./feature-x.js').then(module => {module.init();});
}
兼容性

大数运算 BigInt类型

BigIntES2020引入的新的数值类型,用于表示任意精度的整数,解决了Number类型无法处理超出2^53-1的数值问题。通过在数字末尾添加n或者调用BigInt()函数创建。

// 创建 BigInt
const maxSafeInt = Number.MAX_SAFE_INTEGER; // 9007199254740991
const bigInt1 = 9007199254740992n; // 直接加 n
const bigInt2 = BigInt(9007199254740992); // 函数转换// 大数运算
console.log(bigInt1 + 1n); // 9007199254740993n
console.log(bigInt1 * 2n); // 18014398509481984n// 注意:BigInt 不能与 Number 直接运算
// console.log(bigInt1 + 1); // 错误!TypeError
console.log(bigInt1 + BigInt(1)); // 正确
兼容性

Promise.allSettled方法

Promise.allSettled方法接收一个Promise数组,返回一个新的Promise,该Promise在所有输入的Promise都已完成(无论成功或失败)后,才会完成。

const promises = [Promise.resolve(1),Promise.reject('Error'),Promise.resolve(3)
];Promise.allSettled(promises).then(results => {console.log(results);// [//   { status: 'fulfilled', value: 1 },//   { status: 'rejected', reason: 'Error' },//   { status: 'fulfilled', value: 3 }// ]});
兼容性

字符串 matchAll方法

matchAll方法返回一个迭代器,包含所有匹配正则表达式的结果,每个结果都是一个数组,包含匹配的字符串和捕获组。

const str = "Hello world, hello ES2020!";
const regex = /hello (\w+)/gi;// 使用 matchAll 获取所有匹配结果(包括捕获组)
const matches = str.matchAll(regex);for (const match of matches) {console.log(`匹配内容: ${match[0]}`); // 完整匹配console.log(`捕获组: ${match[1]}`);  // 第一个捕获组console.log(`索引位置: ${match.index}`);
}
匹配内容: Hello world
捕获组: world
索引位置: 0
匹配内容: hello ES2020
捕获组: ES2020
索引位置: 13
兼容性

全局对象 globalThis

globalThis是统一返回全局对象的方式,浏览器window、Node.jsglobal、Web Workerself等都可以通过globalThis访问。

// 旧环境检测全局对象的方式(繁琐且不统一)
const globalObj = typeof window !== 'undefined' ? window :typeof global !== 'undefined' ? global :self;// 新方式(统一且简洁)
console.log(globalThis === window); // 浏览器环境中为 true
console.log(globalThis === global); // Node.js 环境中为 true
兼容性

模块元数据 import.meta

import.meta提供了关于当前模块的元数据信息,例如模块的 URL、导入的依赖等,具体内容由宿主环境决定;且其仅在模块type='module'中可用。

// 在浏览器环境中
console.log(import.meta.url); 
// 输出当前模块的 URL,如 "http://example.com/main.js"// 在 Vite 等构建工具中
console.log(import.meta.env.MODE); 
// 输出当前环境模式(如 "development" 或 "production")
兼容性

模块命名空间导出

export * as namespace语法可以简化模块重新导出,允许将一个模块的所有导出内容聚合到一个命名空间对象中导出。等同于先导入再导出,但没有中间变量

// 旧写法
import * as utils from './utils.js';
export { utils };// 新写法(一行搞定)
export * as utils from './utils.js';
兼容性

for-in枚举顺序标准化

ES2020明确规定for-in循环遍历对象属性的顺序:

  • 数字键(按升序排列)
  • 字符串键(按添加顺序排列)
  • Symbol键(按添加顺序排列)
const obj = { b: 2, 1: 100, a: 1 };
obj[3] = 300;for (const key in obj) {console.log(key); // 输出顺序:1 → 3 → b → a
}

其它

ES2020对空值处理也进行了更新,如下:

  • 空值合并运算符??

1.仅当左侧值为nullundefined时,才会返回右侧值。
2.解决了逻辑或运算符||会误判0''false等假值的问题

const name = null;
const displayName = name ?? "匿名用户";
console.log(displayName); // "匿名用户"const count = 0;
const displayCount = count ?? "无数据";
console.log(displayCount); // 0(而非 "无数据")// 对比 || 的区别
console.log(count || "无数据"); // "无数据"(误判)
兼容性
  • 可选链运算符?.
  1. 可选链运算符?.用于安全地访问对象的属性,避免出现TypeError错误。
  2. 当属性不存在时,返回undefined,而不是抛出错误。
  3. 支持属性访问(obj?.prop)、方法调用(obj?.method())和数组索引(obj?.array[index])
const user = {profile: {name: "Alice",address: {city: "Beijing"}}
};// 旧写法(繁琐)
const city = user && user.profile && user.profile.address && user.profile.address.city;// 新写法(简洁)
const city2 = user?.profile?.address?.city;
console.log(city2); // "Beijing"// 安全调用可能不存在的方法
user.profile.getAge?.(); // 若方法不存在,返回 undefined 而非报错// 安全访问可能不存在的数组索引
const arr = null;
console.log(arr?.[0]); // undefinedjs
兼容性

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

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

相关文章

机器视觉引导机器人修磨加工系统助力芯片封装

芯片制造中,劈刀同轴度精度对封装质量至关重要。传统加工在精度、效率、稳定性、良率及操作便捷性上存在不足:精度不足:劈刀同轴度需控在 0.003mm 内,传统手段难达标,致芯片封装良率低;效率良率低 &#xf…

Python编程基础与实践:Python模块与包入门实践

Python模块与包的深度探索 学习目标 通过本课程的学习,学员将掌握Python中模块和包的基本概念,了解如何导入和使用标准库中的模块,以及如何创建和组织自己的模块和包。本课程将通过实际操作,帮助学员加深对Python模块化编程的理解…

【Django】-4- 数据库存储和管理

一、关于ORM ORM 是啥呀ORM 就是用 面向对象 的方式,把数据库里的数据还有它们之间的关系映射起来~就好像给数据库和面向对象之间搭了一座小桥梁🎀对应关系大揭秘面向对象和数据库里的东西,有超有趣的对应呢👇类 → 数…

深入 Go 底层原理(四):GMP 模型深度解析

1. 引言在上一篇文章中,我们宏观地了解了 Go 的调度策略。现在,我们将深入到构成这个调度系统的三大核心组件:G、M、P。理解 GMP 模型是彻底搞懂 Go 并发调度原理的关键。本文将详细解析 G、M、P 各自的职责以及它们之间是如何协同工作的。2.…

AI赋能测试:技术变革与应用展望

AI 在测试中的应用:技术赋能与未来展望 目录 AI 在测试中的应用:技术赋能与未来展望 1. 引言 1.1 测试在软件开发中的重要性 1.2 AI 技术如何改变传统测试模式 1.3 文章结构概述 2. AI 在测试中的核心应用场景 2.1 自动化测试优化 2.1.1 智能测…

Mujoco(MuJoCo,全称Multi - Joint dynamics with Contact)一种高性能的物理引擎

Mujoco(MuJoCo,全称Multi - Joint dynamics with Contact)是一种高性能的物理引擎,主要用于模拟多体动力学系统,广泛应用于机器人仿真、运动学研究、人工智能等领域。以下是关于Mujoco仿真的一些详细介绍: …

winform-窗体应用的功能介绍(部分)

1--Point实现在窗口(Form)中一个按钮(控件)的固定位置(所在位置)一个按钮(控件)的位置一般是固定的,另一个按钮在窗口中位置是随机产生的Location属性:Location new Point(X,Y);在C#的Winform应用程序里,Button控件的鼠标悬标悬浮事件是不存在内置延迟时间的。当鼠标指针进入按…

最新Windows11系统镜像,23H2 64位ISO镜像

Windows 11 主要分为 Consumer Editions(消费者版)和 Business Editions(商业版)两大类别 。消费者版主要面向家庭和个人用户,商业版则侧重于企业和商业用户。这两大类别中存在部分重叠的版本,比如专业版和…

linux基本系统服务——DNS服务

一、DNS域名解析原理DNS&#xff0c;Domain Name System&#xff0c;域名系统&#xff1a;在互联网中由大量域名解析服务器共同提供的一整套关于“域名 <--> IP地址”信息查询的数据系统!!!! C/S架构&#xff1a;DNS服务端监听UDP 53端口&#xff08;处理客户端查询&…

数据处理和统计分析——08 apply自定义函数

1 apply()函数 1.1 apply()函数简介 Pandas提供了很多数据处理的API&#xff0c;但当提供的API不能满足需求的时候&#xff0c;需要自己编写数据处理函数, 这个时候可以使用apply()函数&#xff1b;apply()函数可以接收一个自定义函数&#xff0c;可以将DataFrame的行或列数据传…

C++冰箱管理实战代码

基于C++的冰箱管理实例 以下是一些基于C++的冰箱管理实例示例,涵盖不同功能场景,每个示例聚焦特定实现点,代码可直接扩展或整合到项目中。 示例1:基础冰箱类定义 class Refrigerator { private:int capacity;std::vector<std::string> items; public:Refrigerator(…

【Python】【数据分析】Python 数据分析与可视化:全面指南

目录1. 环境准备2. 数据处理与清洗2.1 导入数据2.2 数据清洗示例&#xff1a;处理缺失值示例&#xff1a;处理异常值2.3 数据转换3. 数据分析3.1 描述性统计3.2 分组分析示例&#xff1a;按年龄分组计算工资的平均值3.3 时间序列分析4. 数据可视化4.1 基本绘图示例&#xff1a;…

【AI】AIService(基本使用与指令定制)

【AI】AIService(基本使用与指令定制) 文章目录【AI】AIService(基本使用与指令定制)1. 简介2. AIService2.1 引入依赖2.2 编写AIService接口2.3 测试代码3. 指令定制3.1 系统提示词3.2 用户提示词1. 简介 AIService可以被视为应用程序服务层的一个组件&#xff0c;提供对应的…

AAAI赶稿后的心得

总结 已经第三次和老师们一起赶稿了&#xff0c;但是还是纰漏重重&#xff0c;每次都被我的垃圾写作给吓到。每次都手忙脚乱找不到重点&#xff0c;唉&#xff0c;我大概这辈子都成为不了郭老师&#xff1a; 自己把故事先捋清楚&#xff1a; 所有的东西都要抽象出来&#xff0c…

书籍推荐算法研究

## 项目概述本项目是一个完整的书籍推荐系统第五版(Complete Book Recommendation System V5),采用混合推荐策略,能够处理6种不同的用户场景,提供智能化的书籍推荐服务。## 系统架构### 核心设计思路系统采用**混合推荐策略**,结合了以下几种推荐算法:1. **协同过滤推荐…

工具自动生成Makefile

cmake 基础 cmake主要是生成Makefile&#xff0c;以便工程管理&#xff0c;只需要编写CMakeLists.txt安装camkesudo apt install cmake 安装cmake camke --version 查看cmake版本 sudo apt upgrade cmake 升级cmake源码隔离 在工程文件下创建一个build文件&…

Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】

摘 要 使用旧方法对校园活动资讯进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动资讯的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的校园活动资讯网…

关于echarts的性能优化考虑

作为资深前端工程师&#xff0c;在处理 ECharts 性能问题时&#xff0c;核心思路是减少渲染压力、优化数据处理、避免不必要的计算&#xff0c;尤其在大数据量&#xff08;万级以上&#xff09;、高频交互或多图表场景下&#xff0c;性能优化尤为关键。以下是实战中验证过的有效…

汽车EDI:Vitesco EDI 项目案例

Vitesco Technologies&#xff08;纬湃科技&#xff09;脱胎于大陆集团的动力总成部门&#xff0c;是一家于2021年上市的全球领先汽车技术供应商。公司专注于电动出行领域&#xff0c;提供电驱动系统、电池管理系统、功率电子及热管理等关键技术解决方案。同时&#xff0c;其业…

译|Netflix 技术博客:一个利用视觉-语言模型和主动学习高效构建视频分类器的框架

本篇介绍了Netflix的视频标注器&#xff08;VA&#xff09;&#xff0c;一个利用视觉-语言模型和主动学习的交互式框架。其技术亮点在于通过人机协作系统&#xff0c;结合零样本能力和主动学习&#xff0c;引导领域专家高效标注视频数据&#xff0c;显著提升了模型样本效率和平…