Skip to content

Latest commit

 

History

History
89 lines (46 loc) · 3.21 KB

15_ES11.md

File metadata and controls

89 lines (46 loc) · 3.21 KB

ES11 - BigInt

  • 在早期的JavaScript中,我们不能正确的表示过大的数字:
    • 大于MAX_SAFE_INTEGER的数值,表示的可能是不正确的。

image-20220607074119054

  • 那么ES11中,引入了新的数据类型BigInt,用于表示大的整数:
    • BitInt的表示方法是在数值的后面加上n

image-20220607074150339

10 + 'abc'; //这种事做了隐式转换
//但是bigInt类型加上10   它是不会做隐式转换的
// 所以 bigInt + 10  是会报错的
// 所以需要加上n  变成 9007199254740991n + 10
// 如果非要加呢 那么可以这样
bigInt + BigInt(10)	//把number类型转成BigInt类型
// 把大数字转成number类型
Number(bigInt);	// 但是转换过后的类型,有可能是不正确的

ES11 - Nullish Coalescing Operator(空值合并操作)

  • ES11,Nullish Coalescing Operator增加了空值合并操作符:

image-20220607074308086

  • 如果foo有值就用foo 如果foo是null或者是undefined 那么就用默认值
  • 但是 || 是有一个弊端的,如果foo是空字符串的话,或者foo是0的话,它也会用默认值,但是这个时候可能我想要的就是一个空字符串,或者就是0,但是你给我一个默认值,肯定是不正确的
  • 空值合并运算符可以解决这种弊端 只有foo在null或者undefined的时候,才会执行后面的默认值,否则返回的就是foo的值

ES11 - Optional Chaining(可选链)

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

image-20220607074336688

上面的可选链,如果obj.frient没有girlFriend的话,就返回undefined,主要解决的是一个报错,就是我们从undefined中取出数据是会报错的,而且会影响下面的代码运行,所以这里的话就避免了这个错误

ES11 - Global This

  • 在之前我们希望获取JavaScript环境的全局对象,不同的环境获取的方式是不一样的
    • 比如在浏览器中可以通过this、window来获取;
    • 比如在Node中我们需要通过global来获取;
  • 那么在ES11中对获取全局对象进行了统一的规范:globalThis

image-20220607074423764

node下的全局对象

image-20220609071928830

那么如果同一份代码想在node环境下,又想在浏览器环境下,同时拿到全局对象

如果之前会判断window是否为undefined

现在可以用globalThis,在不同环境下指向的都是全局对象

ES11 - for..in标准化

  • 在ES11之前,虽然很多浏览器支持for...in来遍历对象类型,但是并没有被ECMA标准化。
  • 在ES11中,对其进行了标准化,for...in是用于遍历对象的key的:

image-20220607074456899

ES11 其他知识点

  • Dynamic Import(动态导入):后续ES Module模块化中讲解。
  • Promise.allSettled:后续讲Promise的时候讲解。
  • import meta:后续ES Module模块化中讲解。