[译] 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 关注公众号

转载请注明出处

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算) 最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然... 阅读详情

相关推荐

SPSS27 paired t-test 中的Cohen’s D – Effect Size for T-Test

两组数据是相关的且是连续的。

moonlightpeng的博客 909

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

Matlab系列之GUI设计基础

Matlab系列之GUI设计基础简介编辑界面菜单设计控件设计控件描述个人理解Matlab转译控件属性【1】外观与行为【2】控件对象的信息【3】回调函数【4】状态信息结束结束更多精彩,等你发现~ 简介 GUI即图形用户界面(Graphical User Interface),人机交互的一种方式,可以简化用户的操作,比如只需要点点窗口上的按键或者菜单选择等等,就可以实现一个复杂的功能,有点类似黑盒的操作吧。 本篇将主要介绍GUI的使用,以及一些功能,后续的篇章再使用GUI来设计实例。 打开GUI可以在Matla

Smart_Devil的博客 5万+

ES2021+新特性、常用函数

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

weixin_45304926的博客 608

深入解析.Net中SM2与sm-crypto的跨平台加解密实践

本文深入探讨了在.Net平台与前端sm-crypto库之间实现SM2国密算法跨平台加解密的实践方案。针对对接中常见的密钥格式、密文拼接顺序(C1C3C2与C1C2C3)等核心难点,提供了基于BouncyCastle的完整工具类实现、前后端联调示例及问题排查指南,旨在帮助开发者构建安全、兼容的数据加密通道。

weixin_29322855的博客 369

【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果

主成分分析(Principal Component Analysis, PCA)是一种常用的机器学习和数据分析技术,用于降低数据维度、识别数据中的模式、发现变量之间的关系等。

一伦明悦的博客 1263

掌握JavaScript ES2023新特性

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

2301_79507619的博客 768

Cartographer实现双雷达建图

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2 --执行一次前端匹配需要的激光扫描分段数量。关于num_subdivisions_per_laser_scan。num_laser_scans =2,--订阅激光扫描话题数量。Frame改为 前雷达laser_1 后雷达laser_2。雷达的话题由scan改为,前scan_1 后scan_2。有些人说需要改成2,但我这里改成2反而不行,1才可以。

Studying…… 1261

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

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

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

手把手教你YOLOv8/YOLOv11分割训练自己数据集和推理,并教你使用Labelme工具标注数据(附分割网络结构图)

YOLOv8-seg 和 YOLOv11-seg 都是一种高效实例分割算法,实例分割模型的输出是一组勾勒出图像中每个物体的遮罩或轮廓,以及每个物体的类标签和置信度分数。当你不仅需要知道物体在图像中的位置,还需要知道它们的具体形状时,实例分割就非常有用了,功能非常强大,可以应对各种视觉任务。 YOLOv11-seg 则在 YOLOv8-seg 基础上进一步魔改了模型架构,相对分割速度可能更快,其他指标性能有待测试。实例分割可以用于自动驾驶、医疗图像处理、智能农业监控等领域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4475

YOLOv11改进策略【模型轻量化】| 使用 MoblieOne 模块,引入结构重参数化,提高模型检测效率

本文记录的是基于MobileOne的YOLOv11骨干网络改进方法研究。MobileOne的基础模块通过重参数化,。在将其替换YOLOv11的骨干网络后,实现模型轻量化。

Limiiiing的博客 1424

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

在类的字段名前加上。

Cshaosun的博客 1003

GStreamer中h264parse元素

h264parse是 GStreamer 中处理 H.264 视频流的关键元素,主要负责解析和准备 H.264 流以便后续处理。

深之JohnChen的专栏 1026

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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、付费专栏及课程。

余额充值