ES11新增的一些特性

98 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天

ES11新增的一些特性

BigInt

在早期的JavaScript中,我们常不能正确表示过大的数字(大于MAX_SAFA_INTEGER,为9007199254740991)

在ES11中,BigInt打破了这个界限,我们用如下方式定义:

let bigInt = 900719925474099100000n;//以n结尾表示为BigInt类型

但注意BigInt类型数据不能与其他类型直接进行运算,js不会帮我们实现隐式转换

bigInt += 10;//这样就会报错

可以通过BigInt和Number方法完成转换

let num = 100;
bigInt += BigInt(num);//将num转换为BigInt
Number(bigInt);//将bigInt转换为Number

空值合并运算符(Nullish Coalescing Operator)

在开发中,我们常会遇到这种情况:为一个变量A赋值另一个变量B,若变量B为空值,则赋给A默认值

let foo = undefined;
let bar = foo || "default value";

这样当foo为空值时,就会传给bar默认值,但这样做有一个弊端,那就是0、""都会被认为是false,无法准确判断是否为undefined或null,于是就有了空值合并运算符:

let foo = undefined;
let bar = foo ?? "default value";

当foo为0、""等特殊值时,依旧可以正常赋值,只有当foo为null以及undefined时才会赋默认值

可选链(Optional Chaining)

当我们有多层嵌套对象时,会这样去获取深层内容:A.B.C.D,但如果BCD内容被清除,该嵌套不存在了,再去这样获取便会报错,因为A.B获取到的是undefined,我们再用undefined.C来获取C必然会报错,之前我们会从A开始,一个一个属性判断是否为undefined,但现在通过可选链,就能轻松判断:

A?.B?.C?.D

简单加一个问号,便可为我们判断问号前的属性是否存在,如果其中一个属性为undefined,便会直接返回undefined,并不会报错

globalThis

在之前我们获取JavaScript的全局对象,如果是浏览器环境,我们通过this、window来获取,如果是在Node环境下,我们需要通过global来获取。

但现在,我们用globalThis就可以直接在任意环境下获取全局对象

for-in标准化

规范for-in遍历到的为对象的键,很简单,之前我们就知道,不过到现在才正式被标准化

动态导入(Dynamic Import)

import("../*").then()

这样通过import导入返回为promise,我们便可通过then对其再进行操作