前端每日知识扫盲 3/3

142 阅读3分钟

1. promise

简介

  • Promise对象可以解决回调地狱的问题
  • Promise 是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理和更强大
  • Promise可以理解为一个容器,里面可以编写异步程序的代码
  • 从语法上说,Promise 是一个对象,使用的使用需要 new

三种状态

  • 最初状态:pending,等待中,此时promise的结果为 undefined;
  • 当 resolve(value) 调用时,达到最终状态之一:fulfilled,(成功的)完成,此时可以获取结果value
  • 当 reject(error) 调用时,达到最终状态之一:rejected,失败,此时可以获取错误信息 error

当达到最终的 fulfilled 或 rejected 时,promise的状态就不会再改变了。

特点

当调用 resolve的时候,Promise 将到达最终的状态。 达到最终状态之后,Promise的状态就不会再改变了。

多次调用 resolve 函数,只有第一次有效,其他的调用都无效。

同步异步

  • new Promise是同步执行的
  • 获取结果时(调用 resolve 触发 then方法时)是异步的

then方法的链式调用

  • 前一个then里面返回的字符串,会被下一个then方法接收到。但是没有意义;
  • 前一个then里面返回的Promise对象,并且调用resolve的时候传递了数据,数据会被下一个then接收到
  • 前一个then里面如果没有调用resolve,则后续的then不会接收到任何值

2. async 和 await 修饰符

  • async 用于修饰一个 function

    • async 修饰的函数,总是返回一个 Promise 对象
    • 函数内的返回值,将自动包装在 resolved 的 promise 中
  • await 只能出现在 async 函数内

    • await 让 JS 引擎等待直到promise完成并返回结果
    • 语法:let value = await promise对象; // 要先等待promise对象执行完毕,才能得到结果
    • 由于await需要等待promise执行完毕,所以await会暂停函数的执行,但不会影响其他同步任务
  • 对于错误处理,可以选择在async函数后面使用 .catch() 或 在promise对象后使用 .catch()

3. js有哪些数据类型

  • undefined、null、boolean、number、string、object、symbol、bigInt
  • bigInt有在考察平时有没有去了解新闻,知道下就行了

  • undefined 和null的区别

    • nudefined是声明之后的默认值,但null不是
    • undefined一般是给基本类型做未赋值的,null给对象(数组、函数)做未赋值的
    • undefined不是关键字,而null是关键字

4. 为什么 0.1 + 0.2 !== 0.3

0.1+0.2 = 0.3000000000004

浮点数精度问题。0.1存下来的并不是0.1,0.2也不是0.2。所以0.1+0.2也就是约等于0.3

追问:怎么判断2个数字相等?a是一个小数,b是一个小数

|a-b| < 0.00001 就相等

5. 箭头函数和普通函数的区别

  • 箭头函数没有自己的this对象,this指向外部的this
  • 不可以当作构造函数
  • 没有arguments对象,可以用 rest 参数代替
  • 写起来方便
  • 如果函数体只有一句话,可以省略大括号