• es6相关面试题



    es6有哪些新特性

    es6和js的关系
    ES全称ECAMScript,它是js基础构建的一种语言
    js正是建立在es语言的基础规范中使用的
    es是语言层面的东西,它只是定义了JavaScript以及在它基础之上建立的其他语言的语法规范
    JavaScript包括 ECAMScript、DOM、BOM三个组成部分

    es6新特性的分类
    1.解决原有语法上的不足
    比如let和const的块级作用域
    2.对原有语法进行增强
    比如解构,展开,参数默认值,模板字符串
    3.全新的对象,全新的方法,全新的功能
    比如promise.proxy,object,is
    4.全新的数据类型和数据结构
    比如symbol,set,map

    let、const 块级作用域以及和 var 的区别

    1.var 存在提升,能在声明之前使用。let、const 因为暂时性死区的原因,不能在声明前使用
    2.var 在全局作用域下声明变量会导致变量挂载在 window上,其他两者不会
    3.let 和 const 作用基本一致,但是后者声明的变量不能再次赋值

    箭头函数与普通函数区别

    1.写法不一样
    2.普通函数存在变量提升的现象
    3.箭头函数不能作为构造函数使用
    4.两者this的指向不同
    5.箭头函数的arguments指向它的父级函数所在作用域的arguments
    6.箭头函数没有new.target

    箭头函数没有属于自己的this,它的this是捕获其所在上下⽂的 this 值,因为没有属于自己的this,因此不会被new调用
    普通函数的this指向的是它的调用者,谁调用这个函数,this就指向谁,因此可以被new所调用

    promise作用

    Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法
    (1).Promise是一个方案,用来解决多层回调嵌套的方案。它现在是ES6的原生对象。
    (2). 在开发中如果存在多层嵌套的回调方法中,如果同时存在同步、异步的方法,那么实际执行顺序会混乱。不好调试不好维护
    (3).Promise可以把一个多层嵌套的同步、异步都用回调的方法,写为一串.then()组成的调用链。
    Promise的三个状态、两个过程
    三个状态:
    pending(进行中)
    fulfilled(已成功)
    rejected(已失败)
    两个过程:
    从Pending变为Resolved
    从Pending变为Rejected

    promise的方法有哪些/

    Promise构造出来的实例存在以下方法
    then():
    then是实例状态发生改变时的回调函数,第一个参数是resolved(成功)状态的回调函数,第二个参数是rejected(失败)状态的回调函数
    catch():
    catch()方法是.then(null, rejection)或.then(undefined, rejection)的别名,用于指定发生错误时的回调函数
    finally():
    finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作
    构造函数方法:

    all():
    Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
    const p = Promise.all([p1, p2, p3]);
    接受一个数组(迭代对象)作为参数,数组成员都应为Promise实例
    实例p的状态由p1、p2、p3决定
    分为两种:
    只有p1、p2、p3的状态都变成fulfilled(成功),p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数
    只要p1、p2、p3之中有一个被rejected(失败),p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数
    注意,如果作为参数的 Promise 实例,自己定义了catch方法,那么它一旦被rejected,并不会触发Promise.all()的catch方法

    race()
    Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例
    const p = Promise.race([p1, p2, p3]);
    只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变
    率先改变的 Promise 实例的返回值则传递给p的回调函数

    allSettled()
    Promise.allSettled()方法接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例
    只有等到所有这些参数实例都返回结果,不管是fulfilled还是rejected,包装实例才会结束

    const promises = [
      fetch('/api-1'),
      fetch('/api-2'),
      fetch('/api-3'),
    ];
    
    await Promise.allSettled(promises);
    removeLoadingIndicator();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    resolve()
    将现有对象转为 Promise 对象
    Promise.resolve('foo')
    // 等价于
    new Promise(resolve => resolve('foo'))
    参数可以分成四种情况,分别如下:
    参数是一个 Promise 实例,promise.resolve将不做任何修改、原封不动地返回这个实例
    参数是一个thenable对象,promise.resolve会将这个对象转为 Promise 对象,然后就立即执行thenable对象的then()方法
    参数不是具有then()方法的对象,或根本就不是对象,Promise.resolve()会返回一个新的 Promise 对象,状态为resolved
    没有参数时,直接返回一个resolved状态的 Promise 对象

    reject()

    Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected

    const p = Promise.reject('出错了');
    // 等同于
    const p = new Promise((resolve, reject) => reject('出错了'))
    
    p.then(null, function (s) {
      console.log(s)
    });
    // 出错了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Promise.reject()方法的参数,会原封不动地变成后续方法的参数

  • 相关阅读:
    云原生微服务治理经典框架之Spring Cloud Alibaba核心技术与实战案例
    算法竞赛进阶指南 0x68 二分图的匹配
    jdk1.8新特性简介
    PVE Cloud-INIT 模板配置
    3-FreeRTOS任务和协程
    异步函数(async/await)
    flink-connector-mysql-cdc
    C语言文件操作
    Vue的生命周期跟我们一样,你知道吗?
    Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机&GA遗传算法&PSO粒子群优化算法)、案例应用之详细攻略
  • 原文地址:https://blog.csdn.net/xiaolu567/article/details/125902361