title: ES11
categories: Javascript
tag:
- es11
date: 2021-11-29 09:16:34
BigInt
在早期的 JavaScript 中,我们不能正确的表示过大的数字:
- 大于 MAX_SAFE_INTEGER 的数值,表示的可能是不正确的。
const maxInt = Number.MAX_SAFE_INTEGER
console.log(maxInt) //9007199254740991
//此时就不能正确展示了
console.log(maxInt + 1) //9007199254740992
console.log(maxInt + 2) //9007199254740992
那么 ES11 中,引入了新的数据类型 BigInt,用于表示大的整数:
- BigInt 的表示方法是在数值的后面加上 n
const bigInt = 9007199254740992n
console.log(bigInt + 10n) //9007199254741002n
const num = 10
console.log(bigInt + BigInt(num)) //9007199254741002n
空值合并操作符
会明确判断是否是 undefined 或者 null
let foo = '' //不是undefined,也不是null
const result1 = foo || '默认值' //默认值
//会明确判断是否是undefined或者null
const result2 = foo ?? '默认值' //' '
console.log(result1)
console.log(result2)
可选链
可选链也是 ES11 中新增一个特性,主要作用是让我们的代码在进行 null 和 undefined 判断时更加清晰和简洁
const obj = {
friend: {
girlFriend: {
name: 'lucy'
}
}
}
if (obj.friend && obj.friend.girlFriend) {
console.log(obj.friend.girlFriend.name) //lucy
}
我们使用可选链方式
const obj = {
friend: {
// girlFriend: {
// name: 'lucy'
// }
}
}
// if (obj.friend && obj.friend.girlFriend) {
// console.log(obj.friend.girlFriend.name) //lucy
// }
//可选链的方式
console.log(obj.friend.girlFriend?.name)
console.log(11) //会执行后面的代码
globalThis
在之前我们希望获取 JavaScript 环境的全局对象,不同的环境获取的方式是不一样的
- 比如在浏览器中可以通过 this、window 来获取;
- 比如在 Node 中我们需要通过 global 来获取;
那么在 ES11 中对获取全局对象进行了统一的规范:globalThis
console.log(globalThis) //统一了
console.log(this) //浏览器中
console.log(global) //node中
for…in 标准化
在 ES11 之前,虽然很多浏览器支持 for…in 来遍历对象类型,但是并没有被 ECMA 标准化。
在 ES11 中,对其进行了标准化,for…in 是用于遍历对象的 key 的:
const obj = {
name: 'why',
age: 18,
height: 1.88
}
for (const key in obj) {
console.log(key)
}
/**
* name
age
height
*/
Dynamic Import*
后续 ES Module 模块化中讲解。
Promise.allSettled
后续讲 Promise 的时候讲解。
import meta
后续 ES Module 模块化中讲解。