ES11(也称为 ES2020)是 ECMAScript 标准的最新版本,它于 2020 年 6 月发布。本文将介绍一些 ES11 的新特性,包括 BigInt、Promise.allSettled、可选链操作符、Nullish 合并运算符等。这些新特性将有助于提高开发者的效率和代码的可读性。
BigInt
在 JavaScript 中,Number 类型的值有一个最大安全整数(2^53 - 1),如果超过这个范围,就会出现精度丢失的问题。BigInt 是一种新的原始数据类型,它可以表示任意大的整数,而不会出现精度丢失的问题。
BigInt 类型的值以 n 结尾,可以通过在数字后面添加 n 来创建 BigInt,例如:
const bigIntNumber = 9007199254740991n;
BigInt 类型的值可以与 Number 类型的值进行运算,但是需要注意的是,BigInt 与 Number 进行运算时,结果也是 BigInt 类型的值。
Promise.allSettled
Promise.all 方法可以将多个 Promise 对象合并成一个 Promise 对象,当所有的 Promise 对象都成功时,返回一个包含所有 Promise 结果的数组;当其中一个 Promise 对象失败时,则返回该 Promise 对象的错误信息。但是,如果我们需要知道所有 Promise 对象的状态,而不仅仅是成功或失败,我们可以使用 Promise.allSettled 方法。
Promise.allSettled 方法返回一个 Promise 对象,当所有的 Promise 对象都执行完毕时,返回一个包含所有 Promise 对象的状态和结果的数组,例如:
// javascriptcn.com 代码示例 const promises = [ Promise.resolve(1), Promise.reject("error"), Promise.resolve(3) ]; Promise.allSettled(promises).then(results => { console.log(results); });
输出结果为:
[ { status: "fulfilled", value: 1 }, { status: "rejected", reason: "error" }, { status: "fulfilled", value: 3 } ]
可选链操作符
当我们需要访问一个对象的属性或方法时,如果该对象不存在或者该属性或方法不存在,就会出现错误。为了解决这个问题,ES11 引入了可选链操作符(?.)。
可选链操作符可以在对象属性或方法前添加一个问号(?),表示如果该对象不存在或者该属性或方法不存在,就返回 undefined,例如:
// javascriptcn.com 代码示例 const person = { name: "Alice", address: { city: "Shanghai" } }; console.log(person?.address?.city); // "Shanghai" console.log(person?.address?.country); // undefined console.log(person?.phone?.number); // undefined
可选链操作符也可以与函数调用一起使用,例如:
const person = { name: "Alice", sayHello() { console.log(`Hello, my name is ${this.name}.`); } }; person?.sayHello?.(); // "Hello, my name is Alice."
Nullish 合并运算符
在 JavaScript 中,当我们需要为变量赋一个默认值时,通常使用 || 运算符,例如:
const name = person.name || "Unknown";
但是,当变量的值为 falsy 值(例如 0、""、false、null、undefined 等)时,|| 运算符会返回第二个值,这可能不是我们想要的结果。为了解决这个问题,ES11 引入了 Nullish 合并运算符(??)。
Nullish 合并运算符只有在变量的值为 null 或 undefined 时,才返回第二个值,例如:
const name = person.name ?? "Unknown";
当 person.name 的值为 null 或 undefined 时,name 的值为 "Unknown";否则,name 的值为 person.name 的值。
总结
ES11 的新特性包括 BigInt、Promise.allSettled、可选链操作符、Nullish 合并运算符等,这些新特性可以提高开发者的效率和代码的可读性。在使用这些新特性时,需要注意它们的兼容性和语法规则,以免出现错误。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653b71237d4982a6eb5c8ecf