JavaScript

2021-12-20 大约 3 分钟

# JavaScript

# 对象api

  • object.keys(p)
  • object.values(p)
  • object.entries(p)
  • object.assign(p2,p1,p3)将p1,p3中的属性和值分配给p2

# 数组扩api

  • array.map(f)
  • array.reduce(f(x,y),default value):把数组中的函数从左到右处理,结果最为下次的参数,x为初始值
  • array.find(f)所有元素执行f,返回true者找到
  • array.findIndex(f):方法数组元素下标
  • array.includes(数组元素)

# 原型

js函数有个prototype属性,默认为{constructor:该函数对象},使用new关键字,会将新的对象的_proto_属性设置成{constructor:该函数对象}

f.prototype = {constructor:f};
a = new f() //a._proto_ = f.prototype
1
2

函数的声明会将外部的词法环境的引用赋值给函数的[[enveriment]]属性 每个运行的函数都会自动创建一个词法环境对象 将变量和参数存入环境记录,将[[enveriment]]赋值给外部词法环境的引用

# promise

# 概念

  • executor:传递给new Promise的函数,当new Promise被创建,executor会自动运行
  • handle:传递给then,catch,finally的函数
  • state:promise对象内部属性,最初是 "pending",然后在 resolve 被调用时变为 "fulfilled",或者在 reject 被调用时变为 "rejected"。
  • result:promise对象内部属性,最初是 undefined,然后在 resolve(value) 被调用时变为 value,或者在 reject(error) 被调用时变为 error。
  • settled:一个resolved或rejected的promise都会被称为“settled”

# 快速使用

let promise = new Promise(function (resolve, reject) {
    setTimeout(() => resolve("done!"), 1000);
    setTimeout(() => reject(new Error("Whoops!")), 1000);
});

promise
    // resolve调用后
    .then(result => alert(result))
    // reject调用后
    .catch(err => alert(err))
    // f 总是在 promise 被 settled 时运行:即 promise 被 resolve 或 reject。
    .finally(() => alert("haha!"))
// Promise的处理程序都是异步的,所有promise行为都会通过内部的“promise jobs”队列,所以下面的代码先执行
alert("code finished");
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 隐式 try…catch

Promise 的执行者(executor)和 promise 的处理程序(handler)周围有一个“隐式的 try..catch”。如果发生异常,它就会被捕获,并被视为 rejection 进行处理。

new Promise((resolve, reject) => {
  resolve("ok");
}).then((result) => {
  throw new Error("Whoops!"); // reject 这个 promise
}).catch(alert); // Error: Whoops!
1
2
3
4
5

# api

  • Promise.all:等待所有 promise 都 resolve 时,返回存放它们结果的数组。如果给定的任意一个 promise 为 reject,那么它就会变成 Promise.all 的 error,所有其他 promise 的结果都会被忽略。
  • Promise.allSettled: 等待所有 promise 都 settle 时,并以包含以下内容的对象数组的形式返回它们的结果:
    • status: "fulfilled" 或 "rejected"
    • value(如果 fulfilled)或 reason(如果 rejected)。
  • Promise.race:只等待第一个 settled 的 promise 并获取其结果(或 error)
  • Promise.any: 等待第一个 fulfilled 的 promise,并将其结果作为结果返回。如果所有 promise 都 rejected,Promise.any 则会抛出 AggregateError 错误类型的 error 实例。

# Async/await

  • 在函数前面的 “async” 确保这个函数总是返回一个 promise。其他值将自动被包装在一个 resolved 的 promise 中。
async function f() {
  return 1;
}
1
2
3
  • 关键字await让JavaScript引擎等待直到promise完成(settled)并返回结果。这个行为不会耗费任何 CPU 资源,因为 JavaScript 引擎可以同时处理其他任务
  • await必须和async一起使用。
async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // 等待,直到 promise resolve (*)

  alert(result); // "done!"
}

f();
1
2
3
4
5
6
7
8
9
10
11
12
上次编辑于: 2022年7月29日 18:20