返回

ES2020 新特性让开发更轻松

前端

空值合并 ??

空值合并运算符 ?? 用于在操作数为 null 或 undefined 时提供一个默认值。这使得我们可以更简洁地编写代码,而无需检查每个操作数是否为 null 或 undefined。例如,以下代码使用 ?? 运算符来设置变量 name 的默认值:

const name = username ?? "Guest";

如果 username 为 null 或 undefined,name 将被设置为 "Guest"。否则,name 将被设置为 username 的值。

可选链 ?.

可选链运算符 ?. 用于安全地访问嵌套对象的属性。它允许我们在不检查属性是否存在的情况下访问它。例如,以下代码使用 ?. 运算符来访问 user 对象的 name 属性:

const name = user?.name;

如果 user 对象存在并且具有 name 属性,name 将被设置为该属性的值。否则,name 将被设置为 undefined。

Promise.allSettled()

Promise.allSettled() 方法用于等待所有给定的 Promise 对象完成,无论它们是成功还是失败。这使得我们可以更轻松地处理异步操作,而不必担心它们是否会成功。例如,以下代码使用 Promise.allSettled() 方法来等待两个 Promise 对象完成:

const promises = [
  fetch("/data1"),
  fetch("/data2")
];

Promise.allSettled(promises).then((results) => {
  results.forEach((result) => {
    if (result.status === "fulfilled") {
      console.log("Success:", result.value);
    } else {
      console.log("Failure:", result.reason);
    }
  });
});

matchAll()

matchAll() 方法用于在一个字符串中查找所有匹配的子字符串。它返回一个迭代器,该迭代器可以用于遍历所有匹配的子字符串。例如,以下代码使用 matchAll() 方法来查找字符串中所有匹配的数字:

const string = "1234567890";
const matches = string.matchAll(/\d+/g);

for (const match of matches) {
  console.log(match[0]);
}

BigInt

BigInt 是一个新的数据类型,用于表示任意精度的整数。它可以用于表示比 Number 类型所能表示的整数更大的整数。例如,以下代码使用 BigInt 类型来表示一个非常大的整数:

const bigInt = 9007199254740991n;

动态导入

动态导入允许我们按需加载模块。这使得我们可以减少加载时间并提高应用程序的性能。例如,以下代码使用动态导入来加载一个模块:

const module = await import("./module.js");

globalThis

globalThis 是一个新的全局对象,它代表当前的全局作用域。它可以用于访问全局对象的所有属性和方法。例如,以下代码使用 globalThis 对象来访问 window 对象的属性:

console.log(globalThis.window.location.href);

管道运算符 |>

管道运算符 |> 用于将一个表达式的结果作为另一个表达式的输入。这使得我们可以将多个表达式连接在一起,形成一个流水线。例如,以下代码使用管道运算符来将字符串转换为大写,然后将其打印到控制台:

const str = "hello world";
str.toUpperCase() |> console.log;

结语

ES2020 引入了一些新的特性和改进,这些特性和改进使我们可以编写更简洁、更强大的代码。在本文中,我们探讨了其中一些最令人兴奋的新特性,并展示了如何使用它们来编写更高级的 JavaScript 代码。