es7-es11新特性


ES7-ES11

210429

1、ECMAScript7新特性

1.1. Array.prototype.includes

includes方法用来检测数组中是否包含某个元素,返回布尔类型值

//indexOf 返回0 1
const famousbook = ['西游记','红楼梦','三国演义','水浒传']
console.log(famousbook.includes('西游记')) //true
console.log(famousbook.includes('撒哈拉沙漠')) //false

1.2. 指数操作符

在ES7中引入指数运算符**,用来实现幂运算,功能与Math.pow结果相同

console.log(2 ** 10)
console.log(Math.pow(2,10))

2、ECMAScript8新特性

2.1 async和await

async和await两种语法结合可以让异步代码像同步代码一样

async函数

  • 返回值为promise对象
  • promise对象的结果由async函数执行的返回值决定
async function fn(){
    //返回的结果不是一个promise类型的对象,返回的结果就是成功promise对象
    //return 字符串 return;
    //抛出错误,返回的结果是一个失败的promise
    //throw new Error('出错啦!')
    //返回的结果如果是一个promise对象,fn()根据promise对象的状态返回
    return new Promise((resolve,reject)=>{
        resolve('成功的数据')
        reject('失败的错误')
    })
}
const res = fn()
//console.log(res)

//调用then方法
result.then(value => {
    console.log(value)
},reason => {
    console.warn(reason)
})

await表达式

  • await必须写在async函数中
  • await右侧的表达式一般为promise对象
  • await返回的是promise成功的值
  • await的promise失败了,就会抛出异常,需要通过try...catch捕获处理
const p = new Promise((resolve,reject)=>{
    //resolve("user data")
    reject("error")
})
//await要放在async函数中
async function main(){
    try{
        let res = await p
        console.log(res) //user data
    }catch(e){
        console.log(e) //error
    }
}
//调用函数
main()

async和await结合读取文件

const fs = require('fs')
function file1(){
    return new Promise((resolve,reject)=>{
        fs.readFile("文件路径",(err,data)=>{
            if(err)
                reject(err)
            resolve(data)
        })
    })
}
async function fn(){
    //获取file1内容
    let f1 = await file1()
    //输出文件中的内容
    console.log(f1.toString())
}

async和await封装AJAX请求

需解决同源策略


2.2 Object.values 和 Object.entries

0509

  • Object.values()方法返回一个给定对象的所有可枚举属性值的数组
  • Object.entries()方法返回一个给定对象自身可遍历属性[key,value]的数组


2.3 Object.getOwnPropertyDescriptors

该方法返回指定对象所在自身属性的描述对象


3、ECMAScript9新特性

3.1 扩展运算符和rest参数

Rest参数与spread扩展运算符在ES6中已引入,不过ES6中只针对数组,在ES9中为对象提供了像数组一样的rest参数和扩展运算符


3.2 正则扩展-命名捕获分组


3.3 正则扩展-反向断言


3.4 正则dotAll模式


4、ECMAScript10新特性

4.1 对象扩展方法Object.fromEntries

Object.fromEntries:将数组/Map转为对象


4.2 字符串扩展方法trimStart/trimEnd

trimStart清除左侧空格

trimEnd清除右侧空格


4.3 数组扩展方法flat/flatMap


4.4 symbol扩展

Symbol.prototype.description


5、ECMAScript11新特性

5.1 私有属性


5.2 Promise.allSettled

allSettled无论数组中的promise成功还是失败都会全部执行

all数组里有reject停止执行


5.3 String.prototype.matchAll

批量提取数据


5.4 可选链操作符

?.


5.5 动态import



//app.js
//静态导入
//import * as m1 from "./hello.js"
const btn = document.getElementById('btn')
btn.onclick = function(){
    //动态引入,需要用再加载
    import('./hello.js').then(module=>{
        //console.log(module)
        module.hello()
    })
}
//hello.js
export function hello(){
    alert('Hello')
}

5.6 BigInt

大整型


5.7 globalThis

始终指向全局对象