31.ES11-BigInt的使用和空值合并运算符和可选链和globalThis

BigInt

  • 最大安全数字Number.Number.MAX_SAFE_INTEGER
  • 在早期的JavaScript中,我们不能正确的表示过大的数字:
  • 大于MAX_SAFE_INTEGER的数值,表示的可能是不正确的
console.log(Number.MAX_SAFE_INTEGER) //9007199254740991
console.log(Number.MAX_SAFE_INTEGER + 1) //9007199254740992
console.log(Number.MAX_SAFE_INTEGER + 2) //9007199254740992 计算并不正确
  • 那么ES11中,引入了新的数据类型BigInt,用于表示大的整数:
  • BitInt的表示方法是在数值的后面加上n
console.log(90071992547409901) //90071992547409900 输出错误
console.log(90071992547409901n) //90071992547409901n 大数输出正确

BigInt数据类型和Number类型数组进行运算,需要显示的统一类型

const bigNum = 90071992547409901n
const bigNum1 = 999n
const num = 10
console.log(bigNum + BigInt(num)) // 90071992547409911n

//把BigInt数据类型转换为Number类型
console.log(Number(bigNum1) + num) //1009

空值合并运算符??

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

console.log(null ?? "aaa"); //aaa
console.log(undefined ?? "aaa"); //aaa
console.log(0 ?? "aaa"); //0
console.log("" ?? "aaa"); //
console.log(NaN ?? "aaa"); //NaN

从以上可以看出:只有在??前面的值为null或undefined时,才会使用默认值

const foo = undefined;
const res1 = foo ?? "aaa";
const res1 = foo || "aaa";

可选链?

  • 可选链也是ES11中新增一个特性,主要作用是让我们的代码在进行null和undefined判断时更加清晰和简洁:
  • 可选链前面的值如果是null或undefined,则不再执行后面的,之前返回可选链前面的值
const info = {
  name: 'why'
}

//ES11之前
if(info.friend && info.friend.girlFriend) {
  console.log(info.friend.girlFriend.name)
}

//使用可选链
console.log(info.friend?.girlFriend?.name) //undefined

globalThis

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

非常感谢王红元老师的深入JavaScript高级语法让我学习到很多 JavaScript 的知识

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容