分分钟带你了解 ES2022 最重要的 4 个特性!

简介: ECMAScript 2022 将于今年 6 月发布,本篇带来 ES2022 肯定会出现的最重要的 4 个变化!因为这些特性已经进入了 TC39 标准化发布的 第 4 个阶段 了。

image.png

ECMAScript 2022 将于今年 6 月发布,本篇带来 ES2022 肯定会出现的最重要的 4 个变化!因为这些特性已经进入了 TC39 标准化发布的 第 4 个阶段 了。


TC39 所属于 Ecma International,是一个由 JavaScript 开发者、实现者、学者等组成的团体,与 JavaScript 社区合作维护和发展 JavaScript 的标准。


闲言少叙,冲鸭~~


at() 方法



终于!ES2022 数组新增一个 at() 方法,用于根据索引去取值;


var a = [1, 2, 3]; 
a.at(1) // 2 
a.at(-1) // 3


我们可以通过 a.at(-1) 拿到倒数第一项;

而在这之前,拿数组/字符串最后一项是这样的:


const arr = [1,2,3,4]
arr[arr.length - 2] // 3
arr.slice(-2)[0]    // 3
const str = "1234"
str[str.length - 2] // '3'
str.slice(-2)[0]    // '3'


虽然这是一个小的功能改动,但是很大的提高了 数组/字符串 核心操作的可读性;


Error cause



🎉Error cause 是第一个由中国公司(阿里巴巴 TC39 代表 legendecas)代表主导推动的 JavaScript 达到 stage 4 的新特性提案!


这个提案简单理解就是:对 Error 的来源进行一次再包装;


try {
  doSomeComputationThatThrowAnError() 
} catch (error) {
  throw new Error('I am the result of another error', { cause: error })
}


Error Constructor 新增了一个可选的参数 options,其中可以设置 cause 并且接受任意 JavaScript 值,把这个值赋值到新创建的 error.cause 上。


try {
  return await fetch('//unintelligible-url-a') // 抛出一个 low level 错误
    .catch(err => {
      throw new Error('Download raw resource failed', { cause: err }) // 将 low level 错误包装成一个 high level、易懂的错误
    })
} catch (err) {
  console.log(err)
  console.log('Caused by', err.cause)
  // Error: Download raw resource failed
  // Caused by TypeError: Failed to fetch
}


顶层 await



顶层 await 允许开发者在 async 函数外部使用 await 字段。


以前:

await Promise.resolve(console.log('🎉'));
// → SyntaxError: await is only valid in async function
(async function () {
  await Promise.resolve(console.log('🎉'));
  // → 🎉
})();


ES2022:


顶层 await 能在模块 modules 的顶层正常工作。(在 class 代码块或非 async 函数仍不支持。)


const serviceName = await fetch("https://example.com/what-service-should-i-use")
const service = await import(`/services/${serviceName}.js`)
// OR
const params = new URLSearchParams(location.search);
const theme = params.get('theme');
const stylingFunctions = await import(`/styling-functions-${theme}.js`);


也支持条件导入:

const date = new Date()
if(date.getFullYear() === 2023) {
  await require('/special-code-for-2023-year.js')
}


了解更多


私有属性和方法



类 的概念虽然在 ES6 就被提出,但是它的开发程度远低于面向对象语言,有些新的特性将加入 JS,比如 —— 私有属性和方法;


它们用 # 进行标记,在类外部访问时,会报错;


class Human {
  #name = "John";
  setName(name) {
    this.#name = name;
  }
}
const human = new Human()
human.#name = 'Amy'  // ERROR!
human.setName('Amy') // OK
class Human {
  name = "John";
  constructor(name) {
    this.#setName('Amy') // OK
  }
  #setName(name) {
    this.name = name;
  }
}
const human = new Human()
human.#setName('Amy') // ERROR!


OK,以上,便是本篇分享~~ 足够简明扼要吧~~

image.png

我是掘金安东尼,输出暴露输入,技术洞见生活,再会~


相关文章
|
11月前
|
人工智能 监控 安全
91_提示注入:安全提示工程
随着大型语言模型(LLM)技术的快速发展和广泛应用,AI系统正以前所未有的方式改变着我们的工作和生活。然而,这种强大的技术也带来了新的安全挑战,其中提示注入(Prompt Injection)攻击已成为最具威胁性的安全问题之一。提示注入攻击通过精心构造的输入,操纵或欺骗AI系统执行非预期行为,可能导致数据泄露、权限绕过、输出不当内容等严重后果
1335 0
|
人工智能 Java 程序员
通义灵码深度评测:AI程序员是效率革命,还是昙花一现?
在AI编程浪潮中,阿里云推出的通义灵码以“全栈AI程序员”定位强势入局。通过两周深度体验,这款基于通义大模型的工具展现了从代码补全到工程架构、跨语言开发、单元测试及错误排查的强大功能。它不仅大幅提升了开发效率,如节省60%以上的脚手架搭建时间,还在多文件协同和架构感知方面表现出色。尽管在复杂业务逻辑和框架特性理解上仍有提升空间,通义灵码已展现出颠覆性价值,使开发者能聚焦核心业务创新。
1177 5
|
SQL 数据库
DBeaver执行sql文件
本文介绍了DBeaver这款支持多种数据库的通用数据库管理工具和SQL客户端,它具备查看数据库结构、执行SQL查询和脚本、浏览和导出数据等功能。
4867 1
DBeaver执行sql文件
|
域名解析 缓存 运维
【域名解析DNS专栏】域名解析故障排查手册:常见问题与解决方案
【5月更文挑战第22天】【DNS故障排查手册】解决域名无法解析、速度慢、污染劫持及配置错误问题。检查网络、清理缓存、更换DNS服务器、使用HTTPS、DNSSEC及CDN。示例:使用nslookup查询域名解析。定期检查优化DNS服务器,确保稳定安全。
6846 4
【域名解析DNS专栏】域名解析故障排查手册:常见问题与解决方案
|
人工智能 自然语言处理
Kimi Chat是什么模型?一文让你顿悟
Kimi Chat是什么模型?一文让你顿悟
1205 0
|
Web App开发 存储 JavaScript
浏览器之性能指标-INP
浏览器之性能指标-INP
695 0
|
人工智能 文字识别 自然语言处理
AI八大热门领域——2023那个合适您
AI八大热门领域——2023那个合适您
481 0
|
移动开发 缓存 JavaScript
Vue3.0入门 + Vant3.0移动端实践(三)使用Cordova打包Android App
Vue3.0入门 + Vant3.0移动端实践(三)使用Cordova打包Android App
|
机器学习/深度学习 并行计算 Ubuntu
TF之Windows:Windows系统下设置Tensorflow运行方式为GPU加速运行的详细攻略
TF之Windows:Windows系统下设置Tensorflow运行方式为GPU加速运行的详细攻略
TF之Windows:Windows系统下设置Tensorflow运行方式为GPU加速运行的详细攻略

热门文章

最新文章