BigInt
在早期的JavaScript中,我们不能正确的表示过大的数字,大于MAX_SAFE_INTEGER的数值,表示的可能是不正确的。那么ES11中,引入了新的数据类型BigInt,用于表示大的整数,BitInt的表示方法是在数值的后面加上n。
案例
//ES11 之前max_safe_integer是最大的安全整数,再大就不安全了
const maxInt = Number.MAX_SAFE_INTEGER
console.log(maxInt); //9007199254740991
console.log(maxInt + 1) //无论加多少后面数组都是不确定的了
console.log(maxInt + 2); //和+1一样的了
//ES11之后:BigInt
const bigInt = 900719925474099100n
console.log(bigInt)
// console.log(bigInt + 10); //报错,因为10不是大数据,后面js可能会帮我们做隐式转换
console.log(bigInt + 10n); //这样子就可以了
Nulish Coalescing Operator(空值合并运算)
ES11,Nullish Coalescing Operator增加了空值合并操作符。
案例
// const foo = undefiend
// const bar = foo || "default value" //0 "" null undefiend都会有毛病
// console.log(bar);
const foo = 0
const bar = foo ?? 'default value'
console.log(bar); //0
//其实这个ts也有,不过ts是js的超级,一般ts都有js的东西
Optional Chaining(可选链)
可选链也是ES11中新增一个特性,主要作用是让我们的代码在进行null和undefined判断时更加清晰和简洁
案例
const info = {
name:'zhangsan',
friend:{
name:'lilei',
girlFriend:{
name:'hmm'
}
}
}
console.log(info.friend.girlFriend.name); //这是没问题的,但是如果你对象只剩了个name,那就报错,后面的代码都gg了
// const info1 = {
// name:'harry'
// }
if(info && info.friend && info.friend.girlFriend){
console.log(info.friend.girlFriend.name); //以前我们是这样做的
}
//ES11提供了可选链
console.log(info.friend?.girlFriend?.name); //如果没有?.后面直接不执行了,返回undefined
GlobalThis
在之前我们希望获取JavaScript环境的全局对象,不同的环境获取的方式是不一样的。比如在浏览器中可以通过this、window来获取。比如在Node中我们需要通过global来获取。那么在ES11中对获取全局对象进行了统一的规范:globalThis。
// 获取某一个环境下的全局对象(Global Object)
//在浏览器下
// console.log(window);
// console.log(this);
// node下
// console.log(this);
//在node下
// setTimeout(global)
//ES11 在浏览器是wndow在node是global
console.log(globalThis);