ES11 学习

news2024/10/7 0:29:31

文章目录

  • 1. Promise.allSettled
  • 2. Module 新增
    • 2.1 ! 动态导入 import()
    • 2.2 import.meta
    • 2.3 export * as obj from 'module'
  • 3. 字符串 matchAll()
  • 4. BigInt
    • 实际开发相关使用
  • 5. globalThis
  • 6. 空值合并运算符
  • 7. 可选链操作符

1. Promise.allSettled

Promise.allSettled() 返回一个在所有给定的promise 都已经fulfilled 或rejected 后的promise ,并带有一个对象数组,每个对象表示对应的promise 结果。

之前学习的Promise.all 只有在所有的Promise 都已经fulfilled 或rejected 才会执行then() ,否则将执行catch()。

现在有一个聚合网站,需要请求其他网站的数据,如果使用Promise.all ,那么只要有一个网站数据未能传过来就会出错;但是我们现在想要只显示已经传过来的数据,也就是最后不会执行catch() ,只会执行then().

Promise.allSettled([ajax("1.json"),ajax("2.json"),ajax("33.json")])
then(res=>
// hideloading
console.log(res.filter(item=>item.status==="fulfilled"))
console.log()
})

2. Module 新增

2.1 ! 动态导入 import()

标准用法的import 导入的模块是静态的,会使所有被导入的模块,在加载时就被编译(无法做到按需编译降低首页加载速度)。有些场景中,你可能希望根据条件导入模块或者按需导入模块,这时你可以使用动态导入代替静态导入。

function login(){
return "普通"
let obtn = document.querySelector("#login")
obtn.onclick function(){
let role = login()
console.log(role)
render(role)
}
function render(role){
if(role === "管理员"){
// 加载1.js
import("./1.js")
}else{
// 加载2.js
import("./2.js")
}

import() 返回值是一个Promise 对象

async function render(role){
if(role === "管理员"){
// 加载1.js
let res1 = await import("./1.js")
console.log(res1)
}else{
// 加载2.js
let res2 = await import("./2.js")
console.log(res1)
}

在后续框架学习中我们一般将文件放入数组中,使用import() 按需导入文件。

2.2 import.meta

import.meta 会返回一个对象,有一个url 属性,返回当前模块的url 路径,只能在模块内部使用。

console.log("2.js加载了"import.meta)

在这里插入图片描述

2.3 export * as obj from ‘module’

export * as obj from ‘module’ 相当于无损无侵入的继承了某个文件

// 1.js
export default{
name:'111111'
}
export function testl(){
}
// 2.js
export default{
name:"22222"
}
export function test2(){
}
export * as obj1 from './1.js'
// html
<script type="module">
import* as obj from './2.js'
console.log(obj)
</script>

有时候我们需要别人的代码,但是不能改动,我们可以直接导入代码文件。

export* as obj3 from './3.js'
// export {obj3,test4} from './3.js'
// 只导入某个对象或方法
export function test4(){}
export default{
name:"444444"
}

3. 字符串 matchAll()

matchAll() 返回一个包含所有匹配正则表达式的结果的迭代器。可以使用for…of遍历,或者使用展开运算符(…)或者Array.from() 转换为数组。

let str = `
<u1>
<1i>11111</1i>
<1i>22222</1i>
<1i>33333</1i>
<1i>44444</1i>
</u1>
`
let reg = /<1i>(.*)<\/1i>/g
// \ 转义符
// g 表示全局
console.log(str.match(reg))
// 捕获 exec
let match = null
let list = []
while(match = reg.exec(str)){
console.log(match.groups.content)
list.push(match.groups.content)
}
console.log(list)

在这里插入图片描述
使用字符串的matchAll() 可以将全部捕获的内容拿出来。

let iobj = str.matchAll(reg)
for(let i of iobj){
console.log(i.groups.content)
}

4. BigInt

BigInt 是一种数据类型。
JavaScript 能够准确表示的整数范围在( − 2 53 -2^{53} 253 , 2 53 2^{53} 253)之间,超过这个范围,无法精确表示这个值,这使得JavaScript不适合进行科学和金融方面的精确计算。

在这里插入图片描述
为了与Number类型区别,Biglnt类型的数据必须添加后缀n。

let num1 = 123
let num2 = 123n
console.log(num1,num2)
console.log(num1 == num2)
console.log(num1 === num2)
// 简单的比较可以进行
console.log(num2 > 100)
console.log(num2 < 200)

// true
// false
// true
// true

BigInt 数据可以与Number 数据进行简单的比较,但是不可以进行加减乘除运算,会报错;只有转换为同种数据类型才可以进行运算

console.log(num2 + BigInt(2))
// BigInt 函数 -- 把Number 转换为BigInt
console.log(BigInt(2))

// 125n
// 2n

实际开发相关使用

id 一般都是较长的数字,如果从后端得到了Number 数据,对其进行进行加法运算,最大也只能得到 2 53 2^{53} 253,如果运算得到的数据实际上要更大,那么就会出现数据错误。

let jsonstr = {
"id":9007199254740993,
"1ist":[]
}
console.log(JSON.parse(jsonstr).id)
  1. 方案一
    后端传入数据时就直接传入字符串数据

  2. 方案二 – 引入一个模块 json-bigint
    先从github 中下载下来json-bigint 模块,但是这个模块不支持浏览器页面,需要创建vue 或者react 开发环境,或者使用Node 进行演示。

import JSONBigInt from 'json-bigint'
// 转换字符串操作
let JSONBigIntstr = JSONBigInt({storeAsstring: true })
let jsonstr = {
"id":9007199254740993,
"list":[]
}
console.log(JSONBigIntstr.parse(jsonstr))
  1. 方案三 –
let JSONBigIntNative = JSONBigInt({useNativeBigInt:true })
console.log(JSONBigIntNative.parse(jsonstr))

5. globalThis

globalThis – 顶层对象
globalThis 提供了一个标准的方式来获取不同环境下的全局this 对象(也就是全局对象自身)。不像window 或者self 这些属性,它确保可以在有无窗口的各种环境下正常工作。所以,你可以安心的使用globalThis,不必担心它的运行环境。为便于记忆,你只需要记住,全局作用域中的this就是globalThis。,

html 中使用window 可以拿到顶层对象;
webworker 中使用self 可以拿到顶层对象;
但globalThis 在html 或者 webworker 中使用都可以拿到相应的顶层对象。

if (typeof window !=='undefined'){return window;
if (typeof global !=='undefined'){return global;
throw new Error('unable to locate global object);
3;
let globals getGlobal()
if (globals.document){
conso1e.1og("进行dom操作相关")
else
conso1e.1og("不能进行dom操作")
// 现在
if (globalThis.Hocument){
console.1og("进行dom操作相关")
else
conso1e.1og("不能进行dom操作")

6. 空值合并运算符

空值合并运算符(??)是一个逻辑运算符。当左侧操作数为null 或undefined 时,其返回右侧的操作数;否则返回左侧的操作数。

let str1 = null ?? "kerwin"
console.log(str1)
let str2 = undefined ?? "kerwin"
console.log(str2)

// kerwin
// kerwin

这时我们可能会发现’ ?? ’ 跟|| 有些相似,相面代码演示的情况使用’ || ‘也是一样的结果。那么’ ?? '到底有什么区别呢?

let str3 = 0 ?? "kerwin"
console.log(str3)
let str4 = 0 || "kerwin"
console.log(str4)
let str5 = NaN || "kerwin"
console.log(str5)

// 0
// kerwin
// kerwin

?? 和 || 的区别是什么呢?

他们两个最大的区别就是 ‘’ 和0,??的左侧为 ‘’ 或者为 0 的时候,依然会返回左侧的值;
|| 会对左侧的数据进行boolean 类型转换,所以 ‘’ 和 0 会被转换成false ,返回右侧的值。

典型的实际应用就是个人信息页面的个性签名部分。用户个性签名为0 时就显示0 ,在未设置个性签名时才显示“这个人很懒,什么也没有留下”。

7. 可选链操作符

可选链前面的值如果是null 或undefined ,则不再执行后面的,之前返回可选链前面的值。

let obj = {
name:"kerwin",
// location:
// city:"dalian"
// }
// 如果对象没有location 属性,而你有调用了这个属性,那么程序就会报错
}
// 为了解决这个问题,之前的我们是写出了下面这行代码,意思是前者为假 那么就该步程序就不会向下执行
console.log(obj && obj.location && obj.location.city)
// 现在的操作 含义与之前的代码一样
console.log(obj?.location?.city ?? '北京')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1570762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应急响应实战笔记05Linux实战篇(2)

第2篇&#xff1a;捕捉短连接 0x00 前言 ​ 短连接&#xff08;short connnection&#xff09;是相对于长连接而言的概念&#xff0c;指的是在数据传送过程中&#xff0c;只在需要发送数据时&#xff0c;才去建立一个连接&#xff0c;数据发送完成后&#xff0c;则断开此连接…

Azure service tag 导致的Exchange online 无法发送邮件的问题

最近碰到一个比较有趣的客户问题。 这个客户一直在使用Exchange online 与自己在Azure Vnet 里面的exchange server交换邮件。 客户的网络架构如下图所示。 客户说之前从exchange online往外发邮件一直是好的,但是最近两周开始只有百分之3左右的邮件可以发出去,其他的都pen…

C语言中的结构体:高级特性与扩展应用

前言 结构体在C语言中的应用不仅限于基本的定义和使用&#xff0c;还包含一些高级特性和扩展应用&#xff0c;这些特性和应用使得结构体在编程中发挥着更加重要的作用。 一、位字段&#xff08;Bit-fields&#xff09; 在结构体中&#xff0c;我们可以使用位字段来定义成员…

【性能测试】接口测试各知识第2篇:学习目标,1. 理解接口的概念【附代码文档】

接口测试完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;接口测试&#xff0c;学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标&#xff0c;RESTFUL1. 理解接口的概念,2.什么是接口测试…

mybatis流式游标查询-导出DB大数据量查询OOM问题

问题场景 Mysql数据处理类型分以下三种 com.mysql.cj.protocol.a.result.ResultsetRowsStatic&#xff1a;普通查询&#xff0c;将结果集一次性全部拉取到内存 com.mysql.cj.protocol.a.result.ResultsetRowsCursor&#xff1a;游标查询&#xff0c;将结果集分批拉取到内存&…

Windows集群部署项目

目录 一&#xff0c;环境准备 1.1.安装MySQL 1.2.安装JDK 1.3.安装TomCat 1.4.安装Nginx 二&#xff0c;部署 2.1.后台服务部署 2.2.Nginx配置负载均衡及静态资源部署 一&#xff0c;环境准备 1.1.安装MySQL 可以参考博客&#xff1a;http://t.csdnimg.cn/A75bg 1.2.…

我为什么会选择Vim来开发Go项目及Vim IDE安装配置和操作

你好&#xff0c;我是孔令飞&#xff0c;字节跳动云原生资深研发、前腾讯云原生技术专家。《企业级 Go 项目开发实战》、《从零开发企业级 Go 应用》作者&#xff0c;欢迎加入 孔令飞的云原生实战营&#xff0c;助你进阶 Go 云原生高级开发工程师。 作为一名 Golang 开发&…

训练营十六天(二叉树part03)

104.二叉树的最大深度 力扣题目链接(opens new window) 题目 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&…

从头开发一个RISC-V的操作系统(四)嵌入式开发介绍

文章目录 前提嵌入式开发交叉编译GDB调试&#xff0c;QEMU&#xff0c;MAKEFILE练习 目标&#xff1a;通过这一个系列课程的学习&#xff0c;开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文章和知识来自于&#xff1a;[完结] 循序渐进&#x…

leetcode 热题 100(部分)C/C++

leetcode 热题 100 双指针 盛最多水的容器 【mid】【双指针】 思路&#xff1a; 好久没写代码sb了&#xff0c;加上之前写的双指针并不多&#xff0c;以及有点思维定势了。我对双指针比较刻板的印象一直是两层for循环i&#xff0c;j&#xff0c;初始时i,j都位于左界附近&…

MySQL数据库 数据库基本操作(三):表的增删查改(中)

1. 数据库的约束 1.1 约束类型(一般发生于表的创建中) NOT NULL - 指示某列不能存储 NULL 值。UNIQUE - 保证某列的每行必须有唯一的值。DEFAULT - 规定没有给列赋值时的默认值。PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&#xff08;或两个列多个列的结合&#xf…

【CSS】浮动笔记及案例

CSS浮动 1. 认识浮动 float属性可以指定一个元素沿着左侧或者是右侧放置&#xff0c;允许文本和内联元素环绕它 float属性最初只使用文字环绕图片但却是早起CSS最好用的左右布局方案 绝对定位、浮动都会让元素脱标&#xff0c;以达到灵活布局的目的可以通过float属性让元素脱…

FTP,NFS,SSH服务安装和应用,遇到的问题

文章目录 一、FTP是什么&#xff1f;二、NFS是什么&#xff1f;三、SSH是什么&#xff1f;四、FTP&#xff0c;NFS&#xff0c;SSH安装(Ubuntu 操作系统)1.FTP安装2.NFS安装3.SSH服务安装 五、FTP&#xff0c;NFS&#xff0c;SSH应用1.FTP应用12.FTP应用23.NFS应用4.SSH应用 六…

【快速解决】python缺少了PyQt5模块的QtMultimedia子模块

目录 问题描述 问题原因 解决方法 成功示范 问题描述 Traceback (most recent call last): File "d:\桌面\python项目\DesktopWords-master\main.py", line 4, in <module> from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent ModuleNotFoundEr…

动态规划刷题(算法竞赛、蓝桥杯)--线段(线性DP)

1、题目链接&#xff1a;P3842 [TJOI2007] 线段 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; const int N20010; int a[N][2],f[N][2]; //a[i][0]表示l[i],a[i][1]表示r[i] int dis(int a,int b){return abs(a-b); } int…

计算机网络-HTTP相关知识-基础

HTTP基础 基本概念&#xff1a;HTTP是一种计算机之间交流通信的规范&#xff0c;它允许数据在两点之间传输&#xff0c;这个过程可以包括中转或接力。HTTP不仅仅包括文本&#xff0c;还可以包括图片、音频等超文本。状态码&#xff1a;HTTP状态码分为五类&#xff1a; 2xx&…

12-项目部署_持续集成

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从…

BLE协议—HID

BLE协议—HID HID设备HOGP&#xff08;HID Over GATT Profile&#xff09;HID服务HID infoHID ModeHID ReportHID MAP HID设备 HID&#xff08;Human Interface Device&#xff0c;人机接口设备&#xff09;是USB设备中常用的设备类型&#xff0c;是直接与人交互的USB设备&…

PostgreSQL 文章下架 与 热更新和填充可以提升数据库性能

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

keycloak - 鉴权VUE

目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(realms) b、创建客户端 c、创建用户、角色 2、vue代码 a、依赖 b、main.js 三、未解决的问题 目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(r…