[译] JavaScript ES2021 中激动人心的特性

JavaScript新特性:ES6之后的发展 本文深入探讨了JavaScript在ES6之后的发展,包括幂运算符、对象属性的扩展语法、数组的includes方法、SIMD技术以及WebAssembly (WASM)的出现。这些新特性与技术的介绍,为JavaScript开发者提供了新的工具和思路,以应对日益增长的性能和应用复杂度需求。 阅读详情
  • 原文地址:JavaScript ES2021 Exciting Features

  • 原文作者:Taran

  • 译文出自:juejin翻译计划

  • 本文永久链接:https://github.com/xitu/gold-miner/blob/master/article/2020/exciting-features-of-javascript-es2021-es12.md

  • 译者:tonylua

  • 校对者:samyu2000, @HurryOwen

每年,JavaScript 都会增添新的特性。今年的 ES2020 或称 ES11 业已发布 (参阅这篇 ES2020 特性的文章),而 ES2021 或者说是 ES12 预计将于 2021 年中旬发布。

每年被增添到 JavaScript 中的特性都会经历一个四阶段的过程,第四阶段也就是最终的一个。在本文中,我将讨论已经到达第四阶段并已被增添到 Google Chrome V8 引擎中的特性。

本文讨论新特性的列表
  • String.prototype.replaceAll

  • Promise.any

  • 逻辑操作符和赋值表达式

  • 数值分隔符

  • Intl.ListFormat

  • Intl.DateTimeFormat 的 dateStyle 和 timeStyle 选项

String.prototype.replaceAll

在 JavaScript 中,replace() 方法仅替换一个字符串中某模式(pattern)的首个实例。如果我们要替换一个字符串中某模式的所有匹配项,唯一的方法就是使用有全局标记的正则。

拟议的方法 replaceAll() 会返回一个新字符串,该字符串中用一个替换项替换了原字符串中所有匹配了某模式的部分。模式可以是一个字符串或一个正则表达式,而替换项可以是一个字符串或一个应用于每个匹配项的函数。

let str = 'I use linux, I love linux'
str = str.replaceAll('linux', 'windows');

console.log(str)

/****  输出  ****/
// I use windows, I love windows

Promise.any

ES2021 将引入 Promise.any() 方法,一旦该方法从 promise 列表或数组中命中首个 resolve 的 promise (正如 Example 1a 中所解释的那样),就会短路并返回一个值。如果所有 promise 都被 reject ,该方法则将抛出一个聚合的错误信息 (在 Example 1b 里有所展示)。

其区别于 Promise.race() 之处在于,后者在某个 promise 率先 resolve 或 reject 后都会短路。

Example 1a: 尽管某个 promise 的 reject 早于另一个 promise 的 resolve,Promise.any() 仍将返回那个首先 resolve 的 promise。

Promise.any([
  new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')),
  new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')),
  new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')),
])
.then(value => console.log(`Result: ${value}`))
.catch (err => console.log(err))

/****  输出  ****/
// Result: Second

Example 1b: 当所有 promise 都被 reject 后,AggregateError 即被抛出。

Promise.any([
  Promise.reject('Error 1'),
  Promise.reject('Error 2'),
  Promise.reject('Error 3')
])
.then(value => console.log(`Result: ${value}`))
.catch (err => console.log(err))

/****  输出  ****/
// AggregateError: All promises were rejected

逻辑操作符和赋值表达式

在 JavaScript 中,有许多赋值表达式和逻辑操作符,如下所示:

// 赋值表达式例子
let num = 5
num+=10
console.log(num) // 15

// 逻辑操作符例子

let num1 = 6
let num2 = 3

console.log(num1 === 6 && num2 === 2) // false
console.log(num1 === 6 || num2 === 2) // true

在新提案里,我们将有能力结合逻辑操作符和赋值表达式。下面是一些 &&、 || 和 ?? 的例子:

&& 逻辑赋值操作符

该操作符用来在仅当左侧(译注:原文为 LHS,即 Left-hand Side)变量为真值(truthy)时,才将右侧(RHS)变量赋值给左侧变量。

// `&&` 逻辑赋值操作符
let num1 = 5
let num2 = 10

num1 &&= num2

console.log(num1) // 10

// 行 5 也可写作以下方式
// 1. num1 && (num1 = num2)
// 2. if (num1) num1 = num2
|| 逻辑赋值操作符

该操作符用来在仅当左侧变量为虚值(falsy)时,才将右侧变量赋值给左侧变量。

// `||` 逻辑赋值操作符
let num1
let num2 = 10

num1 ||= num2

console.log(num1) // 10

// 行 5 也可写作以下方式
// 1. num1 || (num1 = num2)
// 2. if (!num1) num1 = num2
?? 逻辑赋值操作符

ES2020 已经引入了空值合并操作符(Nullish Coalescing operator,即 ??),该操作符亦可与赋值表达式结合。在仅当左侧变量为 undefined 或 null 时,该操作符才将右侧变量赋值给左侧变量。

// `??` 逻辑赋值操作符
let num1
let num2 = 10

num1 ??= num2
console.log(num1) // 10

num1 = false
num1 ??= num2
console.log(num1) // false

// 行 5 也可写作以下方式
// num1 ?? (num1 = num2)

数值分隔符

数字分隔符(Numeric Separators)的引入将通过使用 _(下划线)符号在数字分组间提供一个隔离以便于阅读数值。例如:

let number = 100_000 

console.log(number)

/****  输出  ****/
// 100000

Intl.ListFormat

ListFormat 对象的构造方法有两个参数,皆为可选。首个参数是一个语言标识(locale),而第二个参数是一个选项对象 -- 包含了 style 和 type 两个属性。

new Intl.ListFormat([locales[, options]])

Intl.ListFormat 有一个叫做 format() 的方法,接受一个数组作为参数,并因 locale 和选项而异以相应的方式格式化该参数数组。

以下给出的是一些结合了不同 locale 和选项的例子。

const arr = ['Pen', 'Pencil', 'Paper']

let obj = new Intl.ListFormat('en', { style: 'short', type: 'conjunction' })
console.log(obj.format(arr)) 

/****  输出  ****/
// Pen, Pencil, & Paper


obj = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' })
console.log(obj.format(arr)) 

/****  输出  ****/
// Pen, Pencil, and Paper


obj = new Intl.ListFormat('en', { style: 'narrow', type: 'conjunction' })
console.log(obj.format(arr)) 

/****  输出  ****/
// Pen, Pencil, Paper


// 传入意大利语标识
obj = new Intl.ListFormat('it', { style: 'short', type: 'conjunction' })
console.log(obj.format(arr)) 

/****  输出  ****/
// Pen, Pencil e Paper


// 传入德语标识
obj = new Intl.ListFormat('de', { style: 'long', type: 'conjunction' })
console.log(obj.format(arr)) 

/****  输出  ****/
// Pen, Pencil und Paper

Intl.DateTimeFormat 的 dateStyle 和 timeStyle 选项

Intl.DateTimeFormat 对象是一个支持语言敏感日期和时间格式化的构造器。拟议的 dateStyle 和 timeStyle 选项可被用于获取一个 locale 特有的日期和给定长度的时间。

一些不同选项和语言(locale)的例子展示在此:

// 短格式的时间
let o = new Intl.DateTimeFormat('en' , { timeStyle: 'short' })
console.log(o.format(Date.now()))
// 11:27 PM


// 中等格式的时间
o = new Intl.DateTimeFormat('en' , { timeStyle: 'medium'})
console.log(o.format(Date.now()))
// 11:27:57 PM


// 长格式的时间
o = new Intl.DateTimeFormat('en' , { timeStyle: 'long' })
console.log(o.format(Date.now()))
// 11:27:57 PM GMT+11


// 短格式的日期
o = new Intl.DateTimeFormat('en' , { dateStyle: 'short'})
console.log(o.format(Date.now()))
// 10/6/20


// 中等格式的日期
o = new Intl.DateTimeFormat('en' , { dateStyle: 'medium'})
console.log(o.format(Date.now()))
// Oct 6, 2020


// 长格式的日期
o = new Intl.DateTimeFormat('en' , { dateStyle: 'long'})
console.log(o.format(Date.now()))
// October 6, 2020

dateStyle 和 timeStyle 选项共用并结合不同语言标识的例子,如下所示:

let abc

// 英语
abc = new Intl.DateTimeFormat('en' , { timeStyle: 'short', dateStyle: 'long'})
console.log(abc.format(Date.now()))
// October 6, 2020 at 11:40 PM


// 意大利语
abc = new Intl.DateTimeFormat('it' , { timeStyle: 'short', dateStyle: 'long'})
console.log(abc.format(Date.now()))
// 6 ottobre 2020 23:40


// 德语
abc = new Intl.DateTimeFormat('de' , { timeStyle: 'short', dateStyle: 'long'})
console.log(abc.format(Date.now()))
// 6. Oktober 2020 um 23:40

总结

作为一个开发者,追踪一门语言的新特性很重要。若你错过了 ES2020 中更新的特性,我推荐你阅读这篇文章 -— ES2020 已至。

--End--

查看更多前端好文
请搜索 云前端 或 fewelife 关注公众号

转载请注明出处

手把手教你用示波器测试DDR5 DRAM信号完整性(附眼图分析技巧) 本文详细介绍了如何使用示波器测试DDR5 DRAM信号完整性,包括眼图分析技巧。从DDR5的核心挑战、测试设备选型到实测工作流程,提供了全面的指导。特别强调了DFE功能验证和系统级协同测试,帮助工程师解决信号完整性问题,提升测试效率。 阅读详情

相关推荐

别再用MounRiver了!在VSCode里用PlatformIO搞定CH32V208开发(附完整配置流程)

本文详细介绍了如何在VSCode中使用PlatformIO进行CH32V208开发,替代传统的MounRiver Studio。通过完整的配置流程和优化技巧,开发者可以构建高效、现代化的RISC-V开发环境,显著提升编译速度和开发效率。

weixin_28711397的博客 534

ES2021更新的内容!

2021 年 6 月 22 日,发布了 ES2021 标准,Github 链接 。标准在每年的 6 月份正式发布一次,作为当年的正式版本。 任何人都可以向标准委员会(又称 TC39 委员会)提案,要求修改语言标准。 一种新的语法从提案到变成正式标准,需要经历五个阶段。每个阶段的变动都需要由 TC39 委员会批准。 1、Stage 0 - Strawman(展示阶段) 2、Stage 1 - Proposal(征求意见阶段) 3、Stage 2 - Draft(草案阶段) 4、Stage 3 - Candi

前端精髓 1142

Keil5芯片包下载后无法识别?手把手排查教程

遇到Keil5芯片包下载后不被识别的问题别慌,常见原因包括安装路径错误或包未正确注册。通过检查Pack Installer状态和手动更新设备支持列表,轻松排查故障,确保开发环境正常运行。

weixin_35459464的博客 878

ES2021+新特性、常用函数

一、ES2021+新特性 ES2021 数字分隔符 Promise.any 逻辑符号简写 ES2022 类的构造新写法 顶层await 字符串、数组的at()方法 正则表达式匹配字符串的时候支持返回开

weixin_45304926的博客 608

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4543

Uniapp+Vue3+Monorepo:如何优化你的前端开发流程(附完整配置代码)

本文详细介绍了如何利用Uniapp+Vue3+Monorepo技术栈优化前端开发流程,提升代码可维护性和团队协作效率。通过Monorepo架构实现依赖管理智能化、代码复用最大化和构建流程统一化,结合完整配置代码和实战指南,帮助开发者快速构建高性能跨端应用。

weixin_29011993的博客 453

掌握JavaScript ES2023新特性

at()` 方法被添加到了所有的基本内置对象,如String、Array、TypedArray和ArrayBuffer.prototype中,提供了一种更简单的方式来访问序列中的最后一个元素或任何其他位置的元素。- **Record**:Record是一个不可变的对象,类似于普通的JavaScript对象,但一旦创建,其内容不能更改。- **Tuple**:Tuple是一个不可变的数组,它的行为类似于数组,但一旦被创建,其内容也不能更改。

2301_79507619的博客 768

3D Slicer的学习(二) 图像的分割

先对不同层级标注,然后点击Fill between slices -> Initialize -> Apply拖动层级颜色区域就会变成连续自适应的动态变化区域。如图,点击Level tracing,在图像上放置鼠标,会显示可能想要选中区域的轮廓,点击鼠标右键会将其显示为蓝色。然后点击Grow from seeds -> Initialize -> Apply,显示3D之后会自动扩展到其他位置的相同部位,从而展示整个部位。如图为copy之后,将黄色区域的颜色复制到原本的绿色区域。

tuweibazong的博客 6080

ES2023来了!深入解析JavaScript的最新更新

本文首发于微信公众号:大迁世界, 我的微信:qq449245884,我会第一时间和你分享前端行业趋势,学习途径等等。更多开源作品请看 GitHub,包含一线大厂面试完整考点、资料以及我的系列文章。快来免费体验ChatGpt plus版本的,我们出的钱可以加入网站底部技术群,一起找bug.

粉丝们务必加入微信粉丝群 616

Ubuntu 20.04 系统备份和还原

最近大家Ubuntu开发环境,经常出现搭着搭着系统就挂了,于是开始琢磨了Ubuntu系统的备份和还原,以备不时之需,Linux环境搭建实在是有点太细,好多情况下,就算曾经搭建过一遍,再次搭建有些包还是忘了安装,做好备份是十分必要的。 经过了一番研究,Ubuntu备份有很多方式:根目录tar、dd、Systemback(1.0版本已经不维护了,2.0版本收费)等等,最终决定使用 —— Timesift, 因为方便一些。 文章参考:小马虎的救星——Timeshift Timeshift Timeshift,是L

Z_Paper的博客 2万+

Qt插件之Qt Designer插件实现

相比于通过控件提升来使用自定义控件,在Qt Designer中直接使用自定义控件更加方便和直观。这里就介绍一下如编写和注册Qt Designer插件。Qt Designer插件本质上来说就是一个动态库,和普通的动态库的区别是插件中导出了Qt Designer能识别的接口。...

yang1fei2的博客 3100

js版本之ES12(2021)、ES13(2022)新特性(九)

在类的字段名前加上。

Cshaosun的博客 1003

流体仿真软件:COMSOL Multiphysics二次开发_(11).COMSOL与外部软件的数据交换

通过上述方法,您可以实现 COMSOL Multiphysics 与外部软件的数据交换,从而更好地集成和分析仿真结果。无论是从文本文件导入数据,导出数据到 MATLAB,还是通过 API 和 COMSOL Server 实现实时通信,都能满足不同场景下的需求。希望这些内容对您在流体仿真领域的开发工作有所帮助。

kkchenjj的博客 1553

Node.js v6 LTS 中最激动人心的六个 ES6 特性

本文讲的是Node.js v6 LTS 中最激动人心的六个 ES6 特性, 随着Node.js v6 LTS "Boron"的发布,Node.js 的核心 API 和依赖关系得到了全面的改进。基于 Chromium 的 JavaScript 引擎的 Node.js V8 的更新非常重要,它具备对 Node.js 和 JavaScript 开发者心...

weixin_34153893的博客 265

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ES2025 新特性详解及老项目升级指南

本文详细介绍了ES2025的几个核心新特性,包括JSON模块、新的Set方法、迭代器辅助工具和RegExp.escape(),并探讨了在Vue2老项目中引入这些特性的可行性。对于新项目建议直接采用现代化工具链,老项目则需权衡升级成本,可通过Babel和core-js实现部分特性的兼容。文章还提供了具体的配置建议,帮助开发者明智地运用新特性,提升代码质量和开发效率。

hsdsnd的博客 1004

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

[译] 在 Google Apps 脚本中使用 ES6 和 npm 模块

原文地址:Using ES6 and npm modules in Google Apps Script 原文作者:Prasanth Janardanan 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:xingqiwu55555 校对者:Baddyo shixi-li 在 Google Apps 脚本中使用 ES6 和 npm 模块 所有的 ...

weixin_33872660的博客 441

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Node.js 8.5 最新发布,三大新特性

Node.js 8.5 虽说前一阵子Node.js在国内技术圈掀起了不小的波澜,但最近 Node.js 发布了8.5版本,在这个版本里,Node 添加了3个激动人心的新特性。相信唱衰Node.js的看客们又要思量一下了。 支持 ES Module 此次版本迭代中,Node.js终于支持了开发者呼声最高的 ES 模块提案。这意味着,你可以直接使用import关键字引入需要的模块

kiddd_fu的博客 2515

Farfalle - 开源AI搜索引擎入门指南与项目介绍

Farfalle是一个令人兴奋的开源AI搜索引擎项目,它允许用户自托管并使用本地或云端的大语言模型(LLMs)。本文将为您详细介绍Farfalle项目,包括其主要功能、技术栈、部署方法以及使用指南。Farfalle是一个类似Perplexity的AI驱动搜索引擎。它支持运行本地LLM模型(如llama3、gemma、mistral、phi3等),也可以通过LiteLLM使用自定义LLM,或者使用云端模型(如Groq/Llama3、OpenAI/gpt4等)。

helloaiworld的博客 1451

别写 js 编译器啦!用宏代替吧。

from http://jlongster.com/Stop-Writing-JavaScript-Compilers--Make-Macros-Instead 过去的一些年对 js 是不错的。曾经备受 political 停滞折磨的屌丝语言,现在有了难以置信的发展平台,活跃的大社区,还有一个进行迅速的标准化工作在进行。主要原因都是因为互联网,当然 node.js 也在此找到了自己的角色定位。

liuyingming910的专栏 2004

深度解析JavaScript ES6新特性:你的代码可以更优雅

这些特性不仅提高了开发者的编写代码的效率,也使代码更易于阅读、维护和扩展。Promise 是异步编程的一种解决方案,表示一个最终可能可用(也可能不可用)的值或异常。ES6 引入了模块的概念,允许开发者将代码分割到独立的模块中,然后可以在其他地方导入它们。这促进了代码的组织和重用。用于将一个可迭代对象(如数组或字符串)的元素展开到新的数组或用于函数调用时的参数。ES6 引入了类语法作为对象构造函数的语法糖,尽管在功能上仍然是基于原型链的继承。箭头函数提供了一种更简洁的函数语法,并且不绑定自己的。

FSUGHAHHA的博客 370

You Don‘t Know JS(俄语仓库版)第 8 章深度解读:async/await、Object.observe、SIMD 与 WebAssembly——“超越 ES6“的前沿特性全景

> 本指南以 [es6 & beyond/ch8.md](https://link.gitcode.com/i/454e41e7efd006b5237d8552ebb64f3b) 为骨架,系统梳理 ECMAScript 2015 定稿前后 TC39 委员会正在酝酿的下一代语言特性:`async function`(异步函数)、`Object.observe(..)`(对象变更观察)、幂运算符 `*

gitblog_00294的博客 191

精读《What‘s new in javascript》

JS 这几个特性提升了 JS 语言的成熟性、完整性,而且看到其访问控制能力、规范性、国际化等能力有着重加强,解决的都是 JS 最普遍遇到的痛点问题。那么,这些 JS 特性中,你最喜欢哪一条呢?想吐槽哪一条呢?欢迎留言。精读《What’s new in javascript》 · Issue #159 · dt-fe/weekly。

qzmlyshao的博客 1380

推荐项目:Koa——Node.js Web应用的下一代框架

推荐项目:Koa——Node.js Web应用的下一代框架 在快速发展的Web开发领域中,选择一个高效且灵活的后端框架至关重要。今天,我们来探讨一款由Express的精神接班人——Koa。通过这份详尽的工作坊指南,你不仅能掌握Koa的基础,还能深入了解ES6生成器等现代JavaScript特性,开启高性能Web服务的新篇章。 项目介绍 Koa是一个轻量级的Node.js Web应用框架,它诞生于2...

gitblog_00490的博客 882

Mumbling--es6的一些应用

该题目可以描述为: [abecs] => [A-Bb-Eee-Cccc-Sssss] [AbeCd] => [A-Bb-Eee-Cccc-Ddddd] 该题目实现起来也比较简单,用传统的js代码实现如下: 1 function accum(s) { 2 3 s = s.toUpperCase().split(""...

WYJ88268826的博客 209

摧枯拉朽,说说ES6的三把火

2015 年是铭心刻骨的一年,这一年,股市崩盘,千古跌停,手里的两个票更是挨了腰斩,宝宝心里苦。同是这一年,ES6 标准落地,作为一名前端开发,宝宝心里又乐开了花。

DOM哥的博客 289

模板字面量之多行字符串:解锁JavaScript的文学潜力

🤍 前端开发工程师、技术日更博主、已过CET6🍨、23年度博客之星前端领域TOP1🕠高级专题作者、打造专栏🍚签约作者、上架课程。

你若盛开,清风自来 1324
上一篇: 立等可取的 Vue + Typescript 函数式组件实战
下一篇: 韬光敛彩:用 nginx + express 无痛实现前端项目本地 mock
云前端
博客等级 码龄17年 101粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值