原文:ES2022新规发布,8个实用新功能


1. .at()

数组负检索

const array = [0,1,2,3,4,5,6] array.at[0] //0
array[0]    //0array.at(-1) //6
array.at(-2) //5解构数组位置const {2:two} = array // two = 2

2.hasOwn()

hasOwnProperty() 只会检查对象的自有属性,对象原形上的属性其不会检测;但是对于原型对象本身来说,这些原型上的属性又是原型对象的自有属性,所以原形对象也可以使用。


let hasOwnProperty = Object.prototype.hasOwnProperty
if (hasOwnProperty.call(object, "foo")) {console.log("has property foo")
}if (Object.hasOwn(object, "foo")) {console.log("has property foo")
}

3.Error Cause

它可以使新错误并保留获取的错误的引用,我们只需将对象 {cause: err} 传递给 Errorconstructor。

async function fetcUserPreferences() {try { const users = await fetch('//user/preferences').catch(err => {throw new Error('Failed to fetch user preferences, {cause: err});})}
}
fetcUserPreferences();

4、正则表达式匹配索引

作为这些规范的一部分,添加了一个特殊的标志 d。通过使用它,正则表达式 API 将返回一个二维数组作为名索引的键。它包含每个匹配项的开始和结束索引。如果在正则表达式中捕获了任何命名组,它将在 indices.groups 对象中返回它们的开始/结束索引, 命名的组名将是它的键。

5.Top-level await

它可能会改变模块的执行顺序, 如果一个模块依赖于另一个具有Top-level await 调用的模块,则该模块的执行将暂停,直到 promise 完成。

// users.js
export const users = await fetch('/users/lists');// usage.js
import { users } from "./users.js";
// ✅ the module will wait for users to be fullfilled prior to executing any code
console.log(users);

6、Class Fields

方便创建私有字段, 只需要将 # 字符添加到我们的变量声明中。

class Foo {#iteration = 0;increment() {this.#iteration++;}logIteration() {console.log(this.#iteration);}
}const x = new Foo();// ❌ Uncaught SyntaxError: Private field '#iteration' must be declared in an enclosing class
x.#iteration// ✅ works
x.increment();// ✅ works
x.logIteration();

拥有私有字段意味着我们拥有强大的封装边界, 无法从外部访问类变量。

class Foo {#iteration = 0;#auditIncrement() {console.log('auditing');}increment() {this.#iteration++;this.#auditIncrement();}
}const x = new Foo();// ❌ Uncaught SyntaxError: Private field '#auditIncrement' must be declared in an enclosing class
x.#auditIncrement// ✅ works
x.increment();

7、Class Static Block

现在能够在任何类中包含静态块,它们只运行一次,并且可以装饰或执行类静态端的某些字段初始化

// ✅ will output 'one two three'
class A {static {console.log('one');}static {console.log('two');}static {console.log('three');}
}
let getPrivateField;class A {#privateField;constructor(x) {this.#privateField = x;}static {// ✅ it can access any private fieldgetPrivateField = (a) => a.#privateField;}
}const a = new A('foo');
// ✅ Works, foo is printed
console.log(getPrivateField(a));

8、Private Fields

方便在某些静态方法中检查字段是否为私有。

class Foo {#brand;static isFoo(obj) {return #brand in obj;}
}const x = new Foo();// ✅ works, it returns true
Foo.isFoo(x);// ✅ works, it returns false
Foo.isFoo({})// ❌ Uncaught SyntaxError: Private field '#brand' must be declared in an enclosing class
#brand in x

【无标题】ES2022 个人笔记相关推荐

  1. 【无标题】学习笔记-2022.8.1-8.6

    文献阅读笔记5 一.文章信息 1. 作者 Berta Bescos, Jose M. F ´ acil, Javier Civera and Jos ´ e Neira 2.单位 University ...

  2. 【无标题】169-179笔记1月18日李游精品前端课程

    169.操作元素的基本流程 一.JS操作元素的基本方法 *因为JS放在文档的最上面,所以要使用window.onload,在页面加载完成后运行JS的代码. 二.操作body标签示例 <scrip ...

  3. 【无标题】180-187笔记1月19日李游精品前端课程笔记

    180.使用JS获取节点名称<script type="text/javascript">onload=function(){var divNode=document. ...

  4. 关于WM_NCHITTEST消息(移动无标题对话框多个)

    我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口. 一个容易想到的方案 ...

  5. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法

    步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'p ...

  6. C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中,常常为了美观需要设置窗体属性"FormBorderStyle"(窗体边框和标题栏外观)为None无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从 ...

  7. Android 置Activity全屏和无标题

    今天,实在没有什么好些写的内容,所以在网上找了很久,才决定写这个博客.比较简单,还是想保持写博客的习惯. 一.在代码里设置全屏. Activity设置全屏和无标题栏,要用到andorid.view.W ...

  8. ActionBarActivity设置全屏无标题

    新建的Activity继承自ActionBarActivity,设置全屏无标题本来非常easy的事,可是没想到app居然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时.!! 原因是Ac ...

  9. android教程1009无标题,Android ActionBarActivity设置全屏无标题实现方法总结_Android_脚本之家...

    Android  ActionBarActivity设置全屏无标题实现方法总结 前言: 新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟 ...

  10. MFC修改窗口无标题和标题信息,修改执执行文件图标

    一.创建MFC后 窗口显示的是 无标题-工程名 修改方法在网上看到了几种,下面介绍下比较简单的一种: 1.在MianFrame.c文件中找到这个函数 BOOL CMainFrame::PreCreat ...

最新文章

  1. java 中 bean 的生命周期
  2. 重磅!泰晤士发布重量级学科排名,90所中国大陆高校上榜
  3. python环境下,执行系统命令方法
  4. python dendrogram_【聚类分析】《数学建模算法与应用》第十章 多元分析 第一节 聚类分析 python实现...
  5. RocketMQ的Producer详解之顺序消息(原理)
  6. 「分布式系统理论」系列专题
  7. 一文彻底掌握二叉查找树
  8. 47 - 算法 - 记住常用位运算-Leetcode-136-只出现一次的数字
  9. php强大的函数,PHP最强大的随机字符串生成函数
  10. 如何从业务和平台两方面入手,设计更具可靠性的微服务?
  11. 算法之图解单纯形算法C++
  12. Flixel横板游戏制作教程(四)— RandomLevels
  13. 攻防世界misc 新手练习区 高手进阶区 wp
  14. 裸金属服务器跟云服务器区别有哪些?裸金属应用在哪些场景中?
  15. 阴阳师进不去怎么办?阴阳师海外打不开解决办法!
  16. [内附完整源码和文档] 基于Java的个人通讯录管理系统
  17. 生产者-消费者问题(有例题!!!)
  18. Arduino小白学习记录:双色LED灯实验
  19. 蓝桥杯模拟题.花园灌溉(bfs)
  20. 搜狗输入法如何设置快捷短语

热门文章

  1. 生信识图之 点图进阶-4 (PCA下篇)
  2. 你应该知道的50个项目管理术语(下)
  3. 岁月不饶人,09年是第一拨90后奔二的一年
  4. 【TM1650】STM8S TM1650芯片控制程序
  5. java基础之集合篇
  6. 贾志刚_OpenCV视频课程资源
  7. 如何使用Android Studio的preview以及如何修改背景风格
  8. 基于C51单片机的DA方波可控制发生器
  9. 医疗知识图谱问答系统(python neo4j)
  10. RENESAS ISL15100IRZ-T7 单端口差分线路驱动器