ES高阶(部分)

152 阅读3分钟
ES6--解构

数组解构

let ary = [1,2,3]

在ES6以前,我们赋值是这样写的:
ary[0]、ary[1]、ary[2]才能取值

在ES6,使用let关键字
let [a,b,c] = ary; //此时a=1,b=2,c=3

如果变量的数量和值的数量不匹配会怎么样
let [a,b,c,d,e] = ary; //此时a=1,b=2,c=3,d和e是undefined

对象解构

let person = {name:'zhangsan',age:20}
let {name,age} = person;
通过 对象的名字 来获取匹配 属性值
console.log(name) //zhangsan
console.log(age)  //20
扩展运算符的补充

扩展运算符可以将数组或对象,转为用逗号分割的参数序列

let ary = [1,2,3]

    使用扩展运算符
...ary  //1,2,3
    但是如果我用console.log输出,就没有逗号了
console.log(...ary)  //1 2 3
    因为逗号被当做console.log中的参数分隔符了
    
let z = { a: 3, b: 4 };
let n = { ...z };
n // { a: 3, b: 4 }    

扩展运算符可以用于合并数组

let ary1 = [1,2,3]
let ary2 = [4,5,6]
let ary3 = [...ary1,...ary3] //1,2,3,4,5,6

不能直接将ary2追加,但是使用...ary2会将数据拆分,这个时候就可以追加了
ary1.push(...ary2) //1,2,3,4,5,6 push从尾部追加
前言

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

async

图片.png

//async函数
async function fn(){
    //返回结果是一个Promise对象
    return new Promise((resolve,reject)=>{
        resolve('成功')
    })
}
//如果return的是成功的值,那么result返回的就是成功的
const result = fn();

//调用then方法,如果result成功,就调用value,失败就调用reason
result.then(value=>{
    console.log(value)
},reason=>{
    //黄色显示
    console.warn(reason)
})
await

图片.png await必须和async一起使用,await是0

//创建promise对象
const p = new Promise((resolve,reject)=>{
    //resolve("成功")
    reject("失败啦")
})

//await必须放在async函数中
async function main(){
    // let result = await p; //p成功的值 成功
    // 如果p返回的是失败的值,那么await就要用try..catch捕获
    try{
        let result = await p
        console.log(result)
    } catch(e){
        console.log(e) // 在catch中捕获失败的数据,进行处理
    }
}
正则扩展-命名捕获分组

reg.exec()方法:匹配成功,返回数组;否则返回null

//声明一个字符串
let str = `<a href = "http://www.baidu.com">百度</a>`

//不用分组的写法
const reg = /<a href="(.*)">(.*)</\a>/

//提取url与标签文本,命名捕获分组  ?<名字>
const reg = /<a href="(?<url>.*)">(?<text>.*)<\/a>/

//执行
const result = reg.exec(str)
//reg.exec() 返回了一个数组,3个数据
    第一个数据:整个字符串
    第二个数据:第一个小括号的匹配到的数据
    第三个数据:第二个小括号的匹配到的数据
    
//提取捕获数据更加方便,命名后的数据会存储在groups
console.log(result.groups.url)
console.log(result.groups.text)
正则扩展-反向断言

1.正向断言

let str = 'QWER123456你哈哈777咳咳咳'

//  \d+ :有1个或多个数字,?=:后面是咳并且前面是数字,匹配上就返回前面的数字内容
// 对咳咳咳这个标志进行区分

const reg = /\d+(?=咳)/
const result = reg.exec(str)

console.log(result) //777 

2.反向断言(我提取777)

数字前面是不是哈哈,如果是,那么就返回数字
const reg = /(?<=哈哈)\d+/

3.dotAll模式

. 元字符 除了换行以外的任意单个字符
let hd = "hdddd"
/hd*?/  ==> h
/hd+?/  ==? hd

? 禁止贪婪
+:取1个或多个,加了禁止贪婪? 表示向少的取,也就是只取1个
*: 取0个或多个,加了禁止贪婪? 表示向少的取,只取0个

图片.png

这里 .*?<a> 表示只取第一个a标签
const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;