ES7,ES8知识点

目录

第 3 章 ECMASript 7 新特性

3.1. Array.prototype.includes

3.2. 指数操作符

第 4 章 ECMASript 8 新特性

4.1. async 和 和 await

4.1.1. async 函数

4.1.2. await 表达式

4.2. Object.values 和 和 Object.entries

4.3. Object.getOwnPropertyDescriptors


相关视频链接:尚硅谷Web前端ES6教程,涵盖ES6-ES11_哔哩哔哩_bilibili

第 3 章 ECMASript 7 新特性


3.1. Array.prototype.includes

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

const mingzhu = ['西游记','红楼梦','三国演义','水浒传'];

//判断
console.log(mingzhu.includes('西游记'));  //true
console.log(mingzhu.includes('金瓶梅'));  //false

3.2. 指数操作符

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

console.log(2 ** 10);  // 1024
console.log(Math.pow(2, 10));   //1024

第 4 章 ECMASript 8 新特性

4.1. async 和 和 await

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

        js中的同步代码与异部代码原创链接:

js中的同步代码和异步代码_南风n(*≧▽≦*)n的博客-CSDN博客_同步代码和异步代码

        同步代码
        代码单线执行,发送服务器请求后,等待返回数据,会出现网页空白(阻塞网页运行)

        异步代码
        代码发送请求后继续执行后续代码,不等待服务器返回数据(网页运行流畅)

        js中常见的异步执行代码:
        1.ajax请求:异步 JavaScript 和 XML
        2.定时器:间隔一段时间才会执行,
        3.事件处理函数:满足事件触发条件才会执行

4.1.1. async 函数

  1. async 函数的返回值为 promise 对象
  2. promise 对象的结果由 async 函数执行的返回值决定
async function fn(){
    // 返回一个字符串
    return '尚硅谷';
}
const result = fn();
console.log(result);

//结果:
//Promise
//[[Prototype]]: Promise
//[[PromiseState]]: "fulfilled"
//[[PromiseResult]]: "尚硅谷"


//返回的结果不是一个 Promise 类型的对象, 返回的结果就是成功 Promise 对象
async function fn(){
    return;
}
const result = fn();
console.log(result);
//结果:
//Promise {<fulfilled>: undefined}
//[[Prototype]]: Promise
//[[PromiseState]]: "fulfilled"
//[[PromiseResult]]: undefined

        

        抛出错误, 返回的结果是一个失败的 Promise 

async function fn(){
    throw new Error('出错啦!');
}
const result = fn();
console.log(result);
//会报错

       

         返回的结果如果是一个 Promise 对象 

async function fn(){
    
    return new Promise((resolve, reject)=>{
        resolve('成功的数据');   //成功的数据
        // reject("失败的错误");  //失败的错误,会报错
            });
}
const result = fn();
console.log(result);

        

        调用 then 方法

    async function fn(){

            return new Promise((resolve, reject)=>{
                resolve('成功的数据');  //成功的数据
                // reject("失败的错误");  //出现警告:失败的错误
            });
    }
    const result = fn();
    console.log(result);

    result.then(value => {
        console.log(value);
    }, reason => {
        console.warn(reason);
    })

4.1.2. await 表达式

  1. await 必须写在 async 函数中
  2. await 右侧的表达式一般为 promise 对象
  3. await 返回的是 promise 成功的值
  4. await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理
        //创建 promise 对象
        const p = new Promise((resolve, reject) => {
            // resolve("用户数据");  //结果:用户数据
            reject("失败啦!");  //失败啦!
        })

        // await 要放在 async 函数中.
        async function main() {
            try {
                let result = await p;
                //
                console.log(result);
            } catch (e) {
                console.log(e);
            }
        }
        //调用函数
        main();

        aysnc和await结合读取文件

//1. 引入 fs 模块
const fs = require("fs");

//读取『为学』
function readWeiXue() {
    return new Promise((resolve, reject) => {
        fs.readFile("./resources/为学.md", (err, data) => {
            //如果失败
            if (err) reject(err);
            //如果成功
            resolve(data);
        })
    })
}

function readChaYangShi() {
    return new Promise((resolve, reject) => {
        fs.readFile("./resources/插秧诗.md", (err, data) => {
            //如果失败
            if (err) reject(err);
            //如果成功
            resolve(data);
        })
    })
}

function readGuanShu() {
    return new Promise((resolve, reject) => {
        fs.readFile("./resources/观书有感.md", (err, data) => {
            //如果失败
            if (err) reject(err);
            //如果成功
            resolve(data);
        })
    })
}

//声明一个 async 函数
async function main(){
    //获取为学内容
    let weixue = await readWeiXue();
    //获取插秧诗内容
    let chayang = await readChaYangShi();
    // 获取观书有感
    let guanshu = await readGuanShu();

    console.log(weixue.toString());
    console.log(chayang.toString());
    console.log(guanshu.toString());
}

main();

        async与await封装AJAX请求:

        // 发送 AJAX 请求, 返回的结果是 Promise 对象
        function sendAJAX(url) {
            return new Promise((resolve, reject) => {
                //1. 创建对象
                const x = new XMLHttpRequest();

                //2. 初始化
                x.open('GET', url);

                //3. 发送
                x.send();

                //4. 事件绑定
                x.onreadystatechange = function () {
                    if (x.readyState === 4) {
                        if (x.status >= 200 && x.status < 300) {
                            //成功啦
                            resolve(x.response);
                        }else{
                            //如果失败
                            reject(x.status);
                        }
                    }
                }
            })
        }
    
        //promise then 方法测试
        // sendAJAX("https://api.apiopen.top/getJoke").then(value=>{
        //     console.log(value);
        // }, reason=>{})
  
        // async 与 await 测试  axios
        async function main(){
            //发送 AJAX 请求
            let result = await sendAJAX("https://api.apiopen.top/getJoke");
            //再次测试
            let tianqi = await sendAJAX('https://www.tianqiapi.com/api/?version=v1&city=%E5%8C%97%E4%BA%AC&appid=23941491&appsecret=TXoD5e8P')

            console.log(tianqi);
        }

        main();

4.2. Object.values 和 和 Object.entries

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

4.3. Object.getOwnPropertyDescriptors

  • 该方法返回指定对象所有自身属性的描述对象
//声明对象
const school = {
    name:"尚硅谷",
    cities:['北京','上海','深圳'],
    xueke: ['前端','Java','大数据','运维']
};
//获取对象所有的键
console.log(Object.keys(school));
//获取对象所有的值
console.log(Object.values(school));
//entries,返回的是一个数组,该数组每个元素也是一个数组[键,值]
console.log(Object.entries(school));
//创建 Map
const m = new Map(Object.entries(school));
console.log(m.get('cities'));
//对象属性的描述对象
console.log(Object.getOwnPropertyDescriptors(school));

//getOwnPropertyDescriptors获取的是name里面的内容
const obj = Object.create(null, {
        name: {
            //设置值
            value: '尚硅谷',
            //属性特性
            writable: true,
            configurable: true,
            enumerable: true
        } 
});

猜你喜欢

转载自blog.csdn.net/woai_mihoutao/article/details/123919722
今日推荐