首页 > 其他分享 >复习ES(6-11)语法之ES11

复习ES(6-11)语法之ES11

时间:2023-07-10 21:45:26浏览次数:50  
标签:11 const log res Promise console ES11 data ES

目录

String.prototype.matchAll()

const str = `
<html>
    <body>
        <div>这是第一个div</div>
        <p>我是p</p>
        <div>这是第二个div</div>
        <span>我是span</span>
    </body>
</html>
`;
function selectDiv(regExp, str) {
  let matches = [];
  while (true) {
    const match = regExp.exec(str);
    if (match == null) {
      break;
    }
    matches.push(match[1]);
  }
  return matches;
}
const regExp = /<div>(.*)<\/div>/g;
const res = selectDiv(regExp, str); 
console.log(res);// [ '这是第一个div', '这是第二个div' ]

ES2020 增加了String.prototype.matchAll()方法,可以一次性取出所有匹配。不过,它返回的是一个遍历器(Iterator),而不是数组。

const regExp = /<div>(.*)<\/div>/g;
// const res = selectDiv(regExp, str);
// console.log(res);// [ '这是第一个div', '这是第二个div' ]
function selectDiv(regExp, str) {
  let matches = [];
  for (let match of str.matchAll(regExp)) {
    matches.push(match[1]);
  }
  return matches;
}
const res = selectDiv(regExp, str);
console.log(res); // [ '这是第一个div', '这是第二个div' ]

按需导入

前端应用初始化时根本不需要全量加载逻辑资源,为了首屏渲染速度更快,很多时候都是按需加载,比如懒加载图片等。而这些按需执行逻辑资源都体现在某一个事件回调中去加载。

const oBtn = document.querySelector("#btn");
oBtn.addEventListener("click", () => {
  import("./ajax").then((mod) => {
    mod.default("static/a.json", (res) => {
      console.log(res);
    });
  });
});

新的原始数据类型:BigInt

BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。

要创建BigInt,只需在整数的末尾追加n即可。

const max = 2 ** 53;
console.log(max);
console.log(Number.MAX_SAFE_INTEGER);
console.log(max === max + 1); // true

const bigInt = 9007199254740993n;
console.log(bigInt);
console.log(typeof bigInt); // bigint

console.log(1n == 1); // true
console.log(1n === 1); // false 类型不同

const bigInt2 = BigInt(9007199254740993n);
console.log(bigInt == bigInt2); // true
console.log(bigInt === bigInt2); // true

Promise扩展

Promise.all()方法只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求。

Promise.all([
  Promise.resolve({
    code: 200,
    data: [1, 2, 3],
  }),
  Promise.reject({
    code: 500,
    data: [],
  }),
  Promise.resolve({
    code: 200,
    data: [7, 8, 9],
  }),
])
  .then((res) => {
    console.log(res);
    console.log("成功");
  })
  .catch((err) => {
    console.log(err);
    console.log("失败");
  });

Promise.all()可以确定所有请求都成功了,但是只要有一个请求失败,它就会报错,而不管另外的请求是否结束。

为了解决这个问题,ES2020 引入了Promise.allSettled()方法,用来确定一组异步操作是否都结束了(不管成功或失败)。所以,它的名字叫做”Settled“,包含了”fulfilled“和”rejected“两种情况。

Promise.allSettled([
  Promise.resolve({
    code: 200,
    data: [1, 2, 3],
  }),
  Promise.reject({
    code: 500,
    data: [],
  }),
  Promise.resolve({
    code: 200,
    data: [7, 8, 9],
  }),
])
  .then((res) => {
    console.log(res);
    const data = res.filter((item) => item.status === "fulfilled");
    console.log(data);
  })
  .catch((err) => {
    console.log(err);
    console.log("失败");
  });

// [
//   { status: 'fulfilled', value: { code: 200, data: [Array] } },
//   { status: 'rejected', reason: { code: 500, data: [] } },
//   { status: 'fulfilled', value: { code: 200, data: [Array] } }
// ]

globalThis

globalThis提供了一个标准的方式去获取不同环境下的全局对象。

在不同环境下全局对象不一样。例如:node⇒global,web⇒window/self

const getGlobal = () => {
  if (typeof self !== "undefined") {
    return self;
  }
  if (typeof window !== "undefined") {
    return window;
  }
  if (typeof global !== "undefined") {
    return global;
  }
  throw new Error("无法找到全局对象");
};
const _global = getGlobal();
console.log(_global);

console.log(globalThis);

可选链

可选链?. 是一种以安全的方式去访问嵌套的对象属性,即使某个属性根本就不存在。

可选链?. 能够使代码变得简便,当位于 ?. 前面的值为 undefinednull 时,会立即阻止代码的执行,并返回 undefined。

const user = {
  address: {
    street: "xx街道",
    getNum() {
      return "80号";
    },
  },
};
const street1 = user && user.address && user.address.street;
const street2 = user?.address?.street;
const num = user?.address?.getNum?.();
console.log(street1);
console.log(street2);
console.log(num);

空值合并运算符

为变量分配默认值时,通常使用逻辑或运算符 ||

let count;
let result = count || 1 ;
console.log(result); // 1

有些时候,如果将空字符串视为有效值,使用逻辑或运算符 || 并不会得到想要的结果。例如:当b为0或者false时,视为有效值,但是a的值却是5

const b = 0;
const a = b || 5;
console.log(a); // 5

空值合并运算符可以解决这种情况。当第一个值是null 或者 undefined 时,它只返回第二个值。

const b = 0;
// const a = b || 5;
// console.log(a); // 5
const a = b ?? 5;
console.log(a); // 0

标签:11,const,log,res,Promise,console,ES11,data,ES
From: https://www.cnblogs.com/Small-Windmill/p/17542411.html

相关文章

  • 复习ES(6-11)语法之ES10
    目录Object.fromEntries()字符串扩展数组扩展JSON扩展Symbol.prototype.description()Object.fromEntries()Object.entries()返回一个给定对象自身可枚举属性的键值对数组。Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象......
  • 爬虫学习02 requests高级用法
    1requests高级用法1.0自动携带cookie的session对象#session对象----》已经模拟登录上了一些网站---》单独把cookie取出来-res.cookies是cookiejar对象,里面有get_dict()方法转换成字典-转成字典res.cookies.get_dict()#使用session发送请求,cookie自动携带sess......
  • [Leetcode Weekly Contest]351
    链接:LeetCode[Leetcode]6451.找出最大的可达成数字给你两个整数num和t。如果整数x可以在执行下述操作不超过t次的情况下变为与num相等,则称其为可达成数字:每次操作将x的值增加或减少1,同时可以选择将num的值增加或减少1。返回所有可达成数字中的最大值......
  • 7.10 requests的高级使用
    1. 自动携带cookie和session对象header={'Referer':'http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2F','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/114......
  • Ubuntu12.04 交叉编译 opencv-2.4.11过程
    1.Ubuntu换源可换源有很多,不过要下载12.04版的,好像不多。1.1先备份源sudocp/etc/apt/sources.list/etc/apt/sources.list.backup1.2由于12.04不受支持了,12.04相关的这些包的资源被移到了old-releases.ubuntu.com域名下:sudogedit/etc/apt/sources.list将下面内容插入......
  • CODE FESTIVAL 2017 Final J 题解
    problem&blog。萌萌点分治,积累个trick/qq。对于完全图\((V,E)\),将\(E\)分成\(E_1,E_2,\cdots,E_k\)(\(E_1\cupE_2\cup\cdots\cupE_k=E\))。对每个边集求MST,得到新边集\(E_1^{'},E_2^{'},\cdots,E_k^{'}\),再求MST。最终剩下的边集,等同于原边集的MST。......
  • 20230710-20230711 数论
    数论被薄纱了/kk授课老师:南京大学-朱富海教授20230710裴蜀定理对于给定不全为零的整数的\(a,b\)一定存在一对整数\(x,y\)满足\(ax+by=gcd(a,b)\)。证明:\(a==0\)\(or\)\(b==0\)显然成立;设\(gcd(a,b)=d\),即求证存在\(x,y\)满足\(ax+by=d\),等式两边同时除......
  • 【计数,DP】CF1081G Mergesort Strikes Back
    ProblemLink现有一归并排序算法,但是算法很天才,设了个递归深度上限,如果递归深度到达\(k\)则立即返回。其它部分都和正常归并排序一样,递归中点是\(\lfloor(l+r)/2\rfloor\),归并每次取两边较小者加入结果。给定\(n,k\),求用这个算法对一个均匀随机的排列\(p\)排序后,\(p\)......
  • Linux 内核0.11 系统调用详解(上)
    备注:本文通过三个问题,引出Linux内核0.11的系统调用。操作系统为什么要引出系统调用?回答这个问题前,请先参看如下图:由图可以看出,从操作系统的角度来看,一台计算机主要分为两级:用户级以及内核级,系统调用主要作用就是连接用户级和内核级的“插座”。上层用户的许多对计算机硬件的操作,......
  • C#开发ESP32E(3)Wifi配置使用
    1.安装Wifi配置库(nanoFramework.System.Device.Wifi)1.1nanoFramework.System.Device.Wifi介绍API预览--地址:https://docs.nanoframework.net/api/System.Device.Wifi.html该库可配置ESP32使用Wifi模块进行通信与Wifi建立连接有如下步骤:创建Wifi适配器扫描Wifi列表......