• 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()方法的参数,会原封不动地变成后续方法的参数

  • 相关阅读:
    ArrayList练习
    内省机制(操作javaBean的信息)
    Pytorch环境搭建(Windows)
    卫龙,赢于盈利,败于营销
    云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka
    高级深入--day29
    Oracle 监控 SQL 精选 (一)
    pandas read_json时ValueError: Expected object or value的解决方案
    【chatgpt&消费者偏好】是什么驱动了游客持续旅游意愿?推文分享—2024-07-08
    胞外囊泡代谢组学—前列腺癌代谢变化研究的新策略
  • 原文地址:https://blog.csdn.net/xiaolu567/article/details/125902361