当前位置: 首页 > news >正文

ES7+知识点整理使用

1.空合并

如果要使用回退值,则必须使用逻辑运算符(“||”)。它几乎适用于所有情况,但在某些情况下也有例外。假设初始值是一个数字或一个布尔值。下面是一个示例,其中我们将为变量分配一个数字,如果初始值不是数字,则将其默认为 5。

let theNumber = 7
let number = theNumber || 5
console.log(number) // 输出: 7

‘number’ 变量等于 7,因为左边的值 (theNumber) 是真值(即 7)。但是如果“数字”值不是 7,而是分配给 0 呢?

let theNumber = 0
let number = theNumber || 5
console.log(number) // 输出:5

由于 0 不是正数/自然数,因此它是一个假值。结果,‘number’ 变量现在将获得分配给它的右侧值,即 5。无论如何,这不是我们想要的。幸运的是,无需编写额外的代码和检查来确认 ‘theNumber’ 变量是一个数字,您可以使用可以使用两个问号 - ‘??’ 编写的空合并运算符。

let theNumber = 0
let number = theNumber ?? 5
console.log(number) // 输出: 0

仅当左侧值等于 undefined 或 null 时,才会分配右侧值。因此,在上面的例子中,‘number’ 变量等于 0。这是当 ‘theNumber’ 变量等于 null 时发生的情况:

let theNumber = null // undefined
let number = theNumber ?? 5
console.log(number) // 输出: 5

2.私有字段

许多编程语言都有允许定义类属性的类,例如 protected、private 和 public。公共属性可以从类及其子类外部访问;而受保护的类只能由其子类访问。另一方面,私有属性只能从类内部访问。从 ES6 开始,JavaScript 开始支持类语法,但现在支持私有字段。要在 JavaScript 中定义私有属性,它应该在前缀中包含主题标签符号。

class Smartphones {
  #phone_color = "silver";
  designer(name) {
    this.name = name;
  }

get_color() {
    return this.#phone_color;
  }
}
const iPhone = new Smartphones("iPhone");
console.log(iPhone.get_color()); // 输出: silver
console.log(iPhone.#phone_color) // 输出: Private field '#phone_color' must be declared in an enclosing class

如果您尝试从外部访问私有属性,JavaScript 引擎将返回错误。

3.Promise.allSettled

当你想要多个 Promise 完成时,可以使用 Promise.all ([promise_1, promise_2])。在这个过程中,如果其中一个promise失败,JavaScript引擎就会抛出一个错误。幸运的是,在某些情况下,一个承诺的失败并不重要,其余的都会解决。为了实现这一点,新的 JavaScript ES11 解压了 Promise.allSettled。

promise_1 = Promise.resolve('hi')
promise_2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'world'))

Promise.allSettled([promise_1, promise_2])
    .then(([promise_1_result, promise_2_result]) => {
        console.log(promise_1_result) // 输出: {status: 'fulfilled', value: 'hi'}
        console.log(promise_2_result) // 输出: {status: 'rejected', reason: 'world'}
})

因此,只有已解析的 Promise 才会返回带有状态和值的对象;而被拒绝的 Promise 返回一个带有状态和原因的对象。

4.动态导入

在使用 webpack 进行模块捆绑时,您可能使用了动态导入。使用 JavaScript ES11,您可以获得对此功能的原生支持。

// Alert.js file
export default {
    show() {
        // Your alert
    }
}

// Some other file
import('/components/Alert.js')
    .then(Alert => {
        Alert.show()
})

由于许多应用程序使用模块打包器(例如 webpack)来优化和转译代码,因此此功能作为更新来得有点晚。

5.MatchAll

MatchAll 方法在通过将正则表达式应用于字符串来查找所有匹配项及其位置时很有用。另一方面,match 方法只返回匹配的项目。

const regex = /\b(iPhone)+\b/g;
const smartphones = "S series, iPhone, note series, iPhone, A series, iPhone, moto phones";

for (const match of smartphones.match(regex)) {
  console.log(match); //iPhone iPhone iPhone
}

相比之下,matchAll 返回附加信息,例如找到的字符串的索引。

const regex = /\b(iPhone)+\b/g;
const smartphones = "S series, iPhone, note series, iPhone, A series, iPhone, moto phones";
for (const match of smartphones.matchAll(regex)) {
  console.log(match);
}
/**
[
  'iPhone',
  'iPhone',
  index: 10,
  input: 'S series, iPhone, note series, iPhone, A series, iPhone, moto phones',
  groups: undefined
]
[
  'iPhone',
  'iPhone',
  index: 31,
  input: 'S series, iPhone, note series, iPhone, A series, iPhone, moto phones',
  groups: undefined
]
[
  'iPhone',
  'iPhone',
  index: 49,
  input: 'S series, iPhone, note series, iPhone, A series, iPhone, moto phones',
  groups: undefined
]
**/

6.globalThis

可以在不同的环境中执行 JavaScript 代码,例如浏览器或 节点.js. 在浏览器中,window变量下有一个全局对象;而在 Node.js 中,它是一个名为 global 的对象。有了 globalThis,现在无论代码运行的环境如何,都可以轻松使用全局对象。

// In a browser
window == globalThis // true

// In node.js
global == globalThis // true



相关文章:

  • 一零二五、hexo : 无法加载文件 C:\Users\Tuomasi\AppData\Roaming\npm\hexo.ps1,因为在此系统上禁止运行脚本。
  • Android androidStudio构建项目过程中问题解决方案(持续更新)
  • windows10 使用 postgreSQL
  • NeuN抗体丨SYSY NeuN抗体说明书及相关研究工具
  • java 远程调用 httpclient 调用https接口
  • Jackson 化学发光免疫印迹解决方案
  • GPM 模型剖析【Golang】
  • 将 JavaScript 源文件的全部内容包装在立即调用的函数中的原因是什么?
  • #pragma pack(1)
  • 联动枚举设计
  • 视频批量添加透明水印,必须用这个方法
  • JS获取/修改文本框输入的内容value,修改div标签中的内容:innerHTML、innerTest
  • 我的世界Minecraft Java开服教程(Windows)开服器开服包下载开服网站服务器开服核心开服端开服软件mac版Java启动器资源包
  • java计算机毕业设计物业管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • Linux下把Tomcat做成服务,并开机自启(方式2-systemctl)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Android Studio:GIT提交项目到远程仓库
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • javascript从右向左截取指定位数字符的3种方法
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 关于 Cirru Editor 存储格式
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端面试之CSS3新特性
  • 巧用 TypeScript (一)
  • 让你的分享飞起来——极光推出社会化分享组件
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用Swoole加速Laravel(正式环境中)
  • 数据科学 第 3 章 11 字符串处理
  • 微服务入门【系列视频课程】
  • 我有几个粽子,和一个故事
  • 线上 python http server profile 实践
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 译米田引理
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云服务器购买完整流程
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #define
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (02)Hive SQL编译成MapReduce任务的过程
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (小白学Java)Java简介和基本配置
  • (原)Matlab的svmtrain和svmclassify
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .htaccess 强制https 单独排除某个目录
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @requestBody写与不写的情况
  • @Resource和@Autowired的区别
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务