【ES2020-ES2022】ES11-ES13很实用新特性

本文总结了几个新版本发布后,直呼666的新功能。解救冗余代码。

ES2022

顶层 await

不用必须在 await 外边包 async function 了!!!

以前 await asyncFunction(); 放在script中直接执行,或者在自启动函数中执行,会报错
but现在! 可以直接调用执行了

在ES Module中,可以直接顶层使用await,并通过try catch 收集报错。
好处:1.代码更简练,不用多写一层function。2.在父级调用该子模块时,会根据await执行同步命令,暂停父级执行。

注:1.顶层 await 只在 ES 模块中生效, 不支持普通脚本和 CommonJS 模块。
2.必须要显式声明模块之间的依赖关系,才会在调用时暂停父级命令。若父级调用的两个子模块之间没有依赖关系,所以只会暂停父级执行,而不会暂停另一子模块的执行。

private & static

更像服务端语法,更规范了。

#开头可以将类的属性和方法设置为私有,它们只能从类本身访问。

 #anotherPrivateField = 4;

static 可以节省内存空间,在多个实例之间共享

 static id = '...';

导入断言

使用这种方式导入,我们就不需要手动解析它了。

在 import…from… 后面加 assert { type: ‘json’ }

import json from './foo.json' assert { type: 'json' };
console.log(json.answer); // 42

负数索引

终于不用写冗余的[arr.length - 1]了!!

arr.at(-1)

注:at() 方法只能用于获取值,不能用于设置。

ES2021

数字分隔符(_)

使用数字分隔符可以提高数字的可读性 ,例如使用 1_000_000 来表示 1000000 。这种方式不会影响代码的功能。

三种操作符 ??= ||= &&=

减少代码冗余及复杂的逻辑判断

赋值操作符 (??=) 该操作符只在变量的值为 null 或 undefined 时才会执行赋值操作。
逻辑或赋值 (||=) 该操作符在变量的值为 “假” 值会执行赋值操作。
逻辑与赋值 (&&=) 该操作符在变量的值为 “真” 值会执行赋值操作。

??= 和 ||=的区别是 当x为0时,??=不会赋值,但||=会赋值。

赋值操作举例:x2 &&= ‘b’;

ES2020

可选链

我们经常需要访问对象的属性或方法,如果对象未定义或为 null,使用访问符 “.” 或者索引符 “[]” 访问其属性或方法时就会抛出异常。可选链就是为了解决这个问题而生的,通过在需要访问的对象后加上 “?”,避免了抛出异常

例如,假设我们有一个对象 person,它有一个属性 name,但是 person 本身的定义是可选的,则可以这样写:let name = person?.name;如果 person 未定义,则 name 也会为 undefined,而不是抛出异常。可选链也可以用在索引和函数调用上。

悄咪咪说,个人评选最好用的更新!!!在业务代码中,通过接口返回的 object ,总是要判断字段是否存在来提高代码鲁棒性,经常会有考虑不周报错的bug。此外,虽然使用三元运算符降低了些代码冗余度,但每个字段判断处理的代码还是一堆。可选链就很好的集合了所有的可能性结果,可以在最后一步进行判断是否为undefined,对于层数很多的 object 非常好用。

空值合并运算符 ??

同上,该操作符与 “||” 操作符用于条件赋值有所不同。相对于 “||” 操作符适用于所有假值,?? 操作符只适用于 undefined 和 null 值。在使用时,可以用它来判断变量是否为 undefined 或者 null,如果是则返回默认值或者指定的值,如果不是则返回变量本身的值。这个操作符可以方便地处理变量的默认值或者初始值。

它只适用于 undefined 和 null 两个值,而不是 false 值。

const correctValue = '' ?? 'incorrect';   // 总是 ""
const anotherCorrectValue = 0 ?? 'incorrect';  // 总是 0

动态导入

传统的导入方式是在代码中使用 import … from … 的语法来导入需要的模块,但使用这种方式会将所有需要导入的模块都一次性加载进来,无法实现按需加载。而动态导入则能够在运行时通过使用 import() 方法来实现按需加载。此外,动态导入也支持使用变量来动态指定需要导入的模块,相比传统的导入方式更加灵活。

let importModule;
if (shouldImport) {
  importModule = await import('./module.mjs');
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值