ES11 学习

文章目录

  • 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 ?? '北京')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法详解】双指针

双指针 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。 1. 双指针简介 双指针&#xff08;Two Pointers&#xff09;&#xff1a;指的是在遍历元素的过程中&#xff0c;不是使用单个指针进行访问&#xff0c;而是使用两个指针进行访问&#…

【uniapp】个推H5号码认证一键登录(附代码)

前言 最近在做APP、h5产品&#xff0c;登陆注册成了难题。邮箱验证多数人不会使用&#xff0c;还是短信方便点&#xff0c;短信可以采用号码认证和验证码的方式&#xff0c;前者稍微便宜的&#xff0c;关于性价比和上手程度我推荐个推&#xff0c; 于是有了今天这篇案例记录&a…

谷歌浏览器插件开发速成指南:弹窗

诸神缄默不语-个人CSDN博文目录 本文介绍谷歌浏览器插件开发的入门教程&#xff0c;阅读完本文后应该就能开发一个简单的“hello world”插件&#xff0c;效果是出现写有“Hello Extensions”的弹窗。 作为系列文章的第一篇&#xff0c;本文还希望读者阅读后能够简要了解在此基…

爬取日本常用汉字秘籍

前言 昨天投简历时遇到了这样的一个笔试。本以为会是数据结构算法之类的没想到直接发了一个word直接提需求&#xff0c;感觉挺有意思就写了这篇文章&#xff0c;感兴趣的朋友可以看看。 1. 网页内容解析 首先&#xff0c;我们通过请求网页获取到日本常用汉字的链接列表。然后…

计算机网络——38报文完整性

报文完整性 数字签名 数字签名类比于手写签名 发送方数字签署了文件&#xff0c;前提是他是文件的拥有者/创建者可验证性&#xff0c;不可伪造性&#xff0c;不可抵赖性 谁签署&#xff0c;接收方可以向他人证明是他&#xff0c;而不是其他人签署了这个文件签署了什么&#…

Web攻击越发复杂,企业如何保护云上业务

如今&#xff0c;电子政务、电子商务、网上银行、网上营业厅等依托Web应用&#xff0c;为广大用户提供灵活多样的服务。在这之中&#xff0c;流量攻击堪称是Web应用的最大敌人&#xff0c;黑客通过流量攻击获取利益、竞争对手雇佣黑客发起恶意攻击、不法分子通过流量攻击瘫痪目…

ShardingSphere-JDBC使用时出现雪花算法id无法生成

出现报错&#xff1a; 这是sql 尝试1&#xff1a; 这里改成Long 还是报错 尝试2&#xff1a;将配置重写 删除 props: # 主键生成器属性配置worker-id: 1 # Snowflake算法中的workerId配置解决&#xff01;

基于Difussion图像、视频生成综述

2024年大年初七&#xff08;02.16&#xff09;OpenAI 发布视频生成模型 Sora 在各大平台转疯了&#xff0c;和2022年发布ChatGPT3.5时一样的疯狂。在开工第一天&#xff0c;我就去官网上看了 Sora 的技术报告&#xff0c;遗憾的是&#xff0c;在这份技术报告中只披露了一些模型…

苹果证书分类及作用详解,助力开发者高效管理应用程序

转载&#xff1a;苹果证书的作用及分类详解 摘要&#xff1a;本文将详细介绍苹果证书的作用及分类&#xff0c;包括企业证书、开发者证书、 推送证书、分发证书和MDM证书&#xff0c;帮助开发者了解如何正确使用和管理这些证书&#xff0c; 提升应用程序的开发和发布效率。 引…

基于SSM的校园二手物品交易平台论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园二手物品交易平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

基于单片机分舱式电开水炉位控制系统

**单片机设计介绍&#xff0c;基于单片机分舱式电开水炉位控制系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机分舱式电开水炉位控制系统概要主要涉及通过单片机对电开水炉的各个舱位进行精确控制&#xff0c;实现水位、温度…

C++中的指针:其重要性与应用深度解析

在C编程语言的世界中&#xff0c;指针无疑是一个至关重要的概念。它不仅是C语言的核心特性之一&#xff0c;更是实现高效、灵活编程的关键工具。理解并熟练掌握指针的使用&#xff0c;对于提升程序设计能力、优化代码性能以及深入理解计算机内存模型具有不可估量的价值。 为了帮…

HarmonyOS 应用开发-ArkUI(ets)仿“腾讯新闻”APP

一、效果演示 1、新闻列表页 2、新闻详情页、图片展示页 3、视频页 4、动态页 二、 流程图 –本来自定义了视频的控制栏的&#xff0c;但是发现VideoController()控制器的bug会导致控制器失效&#xff0c;所以没继续做。视频页先不搞了。 三、文件组织&#xff08;“我的页面…

mac上搭建鸿蒙开发环境(2024)

开发环境 设备 MacBook Pro 芯片 Apple M1 系统 11.4 内存 16 GB 一、下载公开版本的DevEco Studio 华为官方目前对外提供的版本是DevEco Studio 3.1&#xff0c;可在官网下载https://developer.huawei.com/consumer/cn/deveco-studio/ 因为目前还在学习阶段&#xff0c;…

OpenHarmony实战:轻量系统STM32F407芯片移植案例

介绍基于STM32F407IGT6芯片在拓维信息Niobe407开发板上移植OpenHarmony LiteOS-M轻量系统&#xff0c;提供交通、工业领域开发板解决方案。 移植架构采用Board与SoC分离方案&#xff0c;使用arm gcc工具链Newlib C库&#xff0c;实现了lwip、littlefs、hdf等子系统及组件的适配…

循序表实战——基于循序表的通讯录

前言&#xff1a;本篇文章主要是利用顺序表作为底层&#xff0c; 实现一个通讯录。偏向于应用&#xff0c; 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友&#xff0c; 如果顺序表不会写&#xff0c; 或者说没有自己实现过&#xff0c; 请移步学习顺序表相关内…

xgo: golang基于-toolexec实现猴子补丁

注&#xff1a; 转载请注明出处&#xff0c; 原文链接。 概述 在这篇博客中&#xff0c;我将详细介绍 xgo 的实现细节。 如果你不知道&#xff0c;xgo 项目位于 https://github.com/xhd2015/xgo。 它的作用很简单&#xff0c;就是在每个 Go 函数的开头添加拦截器&#xff0…

python-面向对象编程

面向对象编程 面向对象&#xff0c;python中支持两种编程方式&#xff0c;来写代码&#xff0c;分别是&#xff1a;函数式编程和面向对象 函数式&#xff1a; # 定义函数&#xff0c;在函数中实现功能 def func():print("一个NB的功能")面向对象 calss FOO(object):d…

git提交代码时报错,提不了

问题 今天在换了新电脑&#xff0c;提交代码时报错 ✖ eslint --fix found some errors. Please fix them and try committing again. ✖ 21 problems (20 errors, 1 warning) husky > pre-commit hook failed (add --no-verify to bypass) 解决 通过 --no-verify 解决&…

JavaScript - 请你说一说对随机数的理解

难度级别:初级及以上 提问概率:40% 在前端开发中,随机数的应用场景非常多,而且也是一个常见的考点。例如网页登录的验证码,看似只有4个随机数字加字母的组合,其实这也是随机数的范畴;例如在抽奖算法中,可以用随机数确定用户中奖的概率…