ES7-11新特性
ES7新特性
Includes():表示某个数组是否包含给定的值,返回true和false
indexOf()是之前的写法,返回1和-1
**幂运算:2**4 = 2*2*2*2*2
Math.pow(2,4)是之前的写法
ES8新特性
async和await:这2个结合可以让异步代码像同步代码一样
async函数:
- async函数的返回值为promise对象
- promise对象的结果由async函数执行的返回值决定
await表达式:
- 必须写在asyns函数中
- await右侧的表达式一般为promise对象(如果返回的结果不是一个promise类型的对象,那么返回的结果就是一个成功的promise)
- await返回的值是promise成功的值
- await的promise失败了,就会抛出异常(就是一个失败的promise),需要通过try...catch...捕获处理
- 总体返回的值可以用then()处理
对象方法的扩展:
values(),entries(),keys()
ES9新特性
Rest参数与spread扩展运算符在ES6中已经引入,不过ES6中只针对子数组
在ES9中为对象提供了像数组一样的rest参数和扩展运算符
Rest参数:a( { a,b,...c } ){ 方法体 }
spread扩展运算符:{ ...a,...b,...c } 其中abc都是对象
正则扩展
命名捕获分组
反向断言
dotAll模式
ES10新特性
对象扩展方法:
fromEntries:创建对象,和entries()是一个逆运算
- 二维数组
let x = Object.fromEntries(
[
['name','lct'],
['age',20]
]
)
console.log(x)//{name: "lct", age: 20}
- Map
const a = new Map()
a.set('name','lct')
a.set('age',20)
let x = Object.fromEntries(a)
console.log(x)//{name: "lct", age: 20}
字符串的扩展方法:
trimStart和trimEnd:指定清除字符串左侧还是右侧空白
trim 清除字符串两边的空白,这是es5里面的
flat和flatMap:
flat:将一个数组维度降低,比如从三维转成二维
const arr1 = [1,2,3,[4,5]]
const arr2= [1,2,[3,[4,5]]]
console.log(arr1.flat())//打印出[1,2,3,4,5]
console.log(arr2.flat())//打印出[1,2,3,[4,5]]
//这里可以传一个参数,表示数组深度是2,直接从三维数组变成一维数组
console.log(arr2.flat(2))//打印出[1,2,3,4,5]
- flatMap:map()返回的结果如果是一个多维数组,则用flatMap就可以直接将返回降维,只能降1维
[2, 3, 4].flatMap((x) => [x * 2])//[4, 6, 8] // 相当于 [[2, 4], [3, 6], [4, 8]].flat()
Symbol的扩展
可以通过description可以获取symbol的描述
ES11新特性
公有属性和私有属性
- 公有属性 name;
- 私有属性 #age;
字符串扩展方法
- matcAll():数据的批量提取
可选链式操作符 ?.
function main(config){
const dbName1 = config && config.db && config.db.name
//上面这是之前的写法,如果main不传会报错,现在不传也不会报错
const dbName2 = config?.db?.name //现在的写法
console.log(dbName2)//拿到了222
}
main({ db:{ name:'222', age:20 }, ab:{ name:'333', age:30 } })
新类型:BigInt类型 大整形
let n = 521n
console.log(n,typeof(n))// 521n "bigint"
let a = 123
console.log(BigInt(a))//123n,不能传入浮点型数
- 应用于大数值运算
let max = Number.MAX_SAFE_INTEGER//最大的安全型整数 console.log(max)//9007199254740991 console.log(max+1)//9007199254740992 console.log(max+2)//9007199254740992 //max+1和max+2打印出的结果是一样的,就容易出现问题 BigInt(max)+BigInt(1)//9007199254740992n BigInt(max)+BigInt(2)//9007199254740993n //这样写打印出来的就是正确的啦
globalThis:绝对的全局对象,始终指向Window