31.ES11-BigInt的使用和空值合并运算符和可选链和gl
2022-02-15 本文已影响0人
静昕妈妈芦培培
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
的知识