title: ES11
categories: Javascript
tag:

  • es11
    date: 2021-11-29 09:16:34

BigInt

在早期的 JavaScript 中,我们不能正确的表示过大的数字:

  • 大于 MAX_SAFE_INTEGER 的数值,表示的可能是不正确的。
  1. const maxInt = Number.MAX_SAFE_INTEGER
  2. console.log(maxInt) //9007199254740991
  3. //此时就不能正确展示了
  4. console.log(maxInt + 1) //9007199254740992
  5. console.log(maxInt + 2) //9007199254740992

那么 ES11 中,引入了新的数据类型 BigInt,用于表示大的整数:

  • BigInt 的表示方法是在数值的后面加上 n
  1. const bigInt = 9007199254740992n
  2. console.log(bigInt + 10n) //9007199254741002n
  3. const num = 10
  4. console.log(bigInt + BigInt(num)) //9007199254741002n

空值合并操作符

会明确判断是否是 undefined 或者 null

  1. let foo = '' //不是undefined,也不是null
  2. const result1 = foo || '默认值' //默认值
  3. //会明确判断是否是undefined或者null
  4. const result2 = foo ?? '默认值' //' '
  5. console.log(result1)
  6. console.log(result2)

可选链

可选链也是 ES11 中新增一个特性,主要作用是让我们的代码在进行 null 和 undefined 判断时更加清晰和简洁

  1. const obj = {
  2. friend: {
  3. girlFriend: {
  4. name: 'lucy'
  5. }
  6. }
  7. }
  8. if (obj.friend && obj.friend.girlFriend) {
  9. console.log(obj.friend.girlFriend.name) //lucy
  10. }

我们使用可选链方式

  1. const obj = {
  2. friend: {
  3. // girlFriend: {
  4. // name: 'lucy'
  5. // }
  6. }
  7. }
  8. // if (obj.friend && obj.friend.girlFriend) {
  9. // console.log(obj.friend.girlFriend.name) //lucy
  10. // }
  11. //可选链的方式
  12. console.log(obj.friend.girlFriend?.name)
  13. console.log(11) //会执行后面的代码

globalThis

在之前我们希望获取 JavaScript 环境的全局对象,不同的环境获取的方式是不一样的

  • 比如在浏览器中可以通过 this、window 来获取;
  • 比如在 Node 中我们需要通过 global 来获取;

那么在 ES11 中对获取全局对象进行了统一的规范:globalThis

  1. console.log(globalThis) //统一了
  2. console.log(this) //浏览器中
  3. console.log(global) //node中

for…in 标准化

在 ES11 之前,虽然很多浏览器支持 for…in 来遍历对象类型,但是并没有被 ECMA 标准化。

在 ES11 中,对其进行了标准化,for…in 是用于遍历对象的 key 的:

  1. const obj = {
  2. name: 'why',
  3. age: 18,
  4. height: 1.88
  5. }
  6. for (const key in obj) {
  7. console.log(key)
  8. }
  9. /**
  10. * name
  11. age
  12. height
  13. */

Dynamic Import*

后续 ES Module 模块化中讲解。

Promise.allSettled

后续讲 Promise 的时候讲解。

import meta

后续 ES Module 模块化中讲解。