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

【前端】ES13:ES13新特性

文章目录

  • 1 类新增特性
    • 1.1 私有属性和方法
    • 1.2 静态成员的私有属性和方法
    • 1.3 静态代码块
    • 1.4 使用in来判断某个对象是否拥有某个私有属性
  • 2 支持在最外层写await
  • 3 at函数来索引元素
  • 4 正则匹配的开始和结束索引
  • 5 findLast() 和 findLastIndex() 函数
  • 6 Error对象的Cause属性

1 类新增特性

1.1 私有属性和方法

class Cache{#obj = {}get(key){return this.#obj[key]}set(key, value){this.#obj[key] = value}
}let cache = new Cache()
cache.set("name", "kerwin")
class Person{//不需要外部传参进来的,一开始就初始化的,可以在类的最外层作用域声明这个成员state = { // es13可以直接提出来写a: 1,b: 2}// a = 1;// b = 2;constructor(name, age){this.name = namethis.age = age//	this.state = { // 不需要传参//                 	a: 1,//                	b: 2//             	}}
}

1.2 静态成员的私有属性和方法

我们还可以给类定义静态成员和静态私有函数。类的静态方法可以使用this关键字访问其他的私有或者公有静态成员。

class Cache{static #count = 0; // Cache.#count访问不到,报错static getCount(){return this.#count // Cache.#getCount访问不到,报错}#obj = {}get(key){return this.#obj[key]}set(key, value){this.#obj[key] = value}
}let cache = new Cache()
cache.set("name", "kerwin")console.log(Cache.getCount())

1.3 静态代码块

ES13允许在类中通过static关键字定义一系列静态代码块,这些代码块只会在类被创造的时候执行一次。这其实有点像一些其他的如C#和Java等面向对象的编程语言的静态构造函数的用法。

一个类可以定义任意多的静态代码块,这些代码块会和穿插在它们之间的静态成员变量一起按照定义的顺序在类初始化的时候执行一次。我们还可以使用super关键字来访问父类的属性。

 class Cache{static obj = new Map()static {this.obj.set("name","kerwin")this.obj.set("age",100)}static{console.log(this.obj)}
}console.log(Cache.obj)

1.4 使用in来判断某个对象是否拥有某个私有属性

class Cache {#obj = {}get(key) {return this.#obj[key]}set(key, value) {this.#obj[key] = value}hasObj(){return #obj in this // in关键字:判断某个属性是不是私有属性}
}let cache = new Cache()
console.log(cache.hasObj()) // true

2 支持在最外层写await

顶层await只能用在ES6模块,不能用在CommonJS模块。这是因为CommonJS模块的require()是同步加载,如果有顶层await,就没法处理加载了。

<script type="module">function ajax() {return new Promise((resolve) => {setTimeout(() => {resolve("data-1111");}, 1000);})
}let res = await ajax();
console.log(res)
</script>
//1.js
function ajax(){return new Promise((resolve)=>{setTimeout(()=>{resolve("data-11111")},2000)})
}let data = await ajax() // 2秒之后模块才会导出export default {name:"moduleA",data
}<script type="module">console.log("开始")// await写起来是同步,执行是异步的感觉let moduleA = await import("./1.js") // 动态导入,导入promise对象console.log(moduleA) // 2秒之后拿到结果,不耽误上面代码执行
</script>

3 at函数来索引元素

let arr = ["kerwin","tiechui","gangdan","xiaoming"]console.log(arr[1])
console.log(arr[arr.length - 1]) 
console.log(arr[arr.length - 2]) console.log(arr.at(1))
console.log(arr.at(-1))
console.log(arr.at(-2))let str = "kerwin"console.log(str.at(-1))
console.log(str.at(-2))

4 正则匹配的开始和结束索引

let str = "今天是2022-11-10"
// 多了一个属性:indices:0: [3, 13], 1: [3, 7], 2: [8, 10], 3: [11, 13]
let reg = /(?<year>[0 - 9]{4}) - (?<month>[0 - 9]{2}) - (?<day>[0 - 9]{2})/d//exec
let res = reg.exec(str)
// console.log(res)
let {year, month, day} = res.groups // group -> index = 3
console.log(res) // day: [11, 13], month: [8, 10], year: [3, 7]

5 findLast() 和 findLastIndex() 函数

let arr = [11,12,13,14,15]// let res = arr.find(function(value){
//   return value % 2 === 0
// })
// let res = arr.findIndex(function(value){
//   return value % 2 === 0
// })
// let res = arr.findLast(function(value){
//   return value % 2 === 0
// })
let res = arr.findLastIndex(function(value){return value % 2 === 0
})let res1 = arr.find(value => value > 13) // 14
let res2 = arr.findIndex(value => value > 13) // 3
let res3 = arr.findLast(value => value > 13) // 15
let res4 = arr.findLastIndex(value => value > 13) // 4let res5= arr.find(value => value % 2 === 0) // 12
let res= arr.findLast(value => value % 2 === 0) // 14
console.log(res)

6 Error对象的Cause属性

Error对象多了一个cause属性来指明错误出现的原因。这个属性可以帮助我们为错误添加更多的上下文信息,从而帮助使用者们更好地定位错误。

function getData(){try{console.log(kerwin)}catch(e){throw new Error('New error 1111111',{cause:"这是因为,,,,,,,,,"});}
}try{getData()
}catch(e){console.log(e.cause)
}
http://www.lryc.cn/news/447778.html

相关文章:

  • vuepress 浏览器加载缓存,总是显示旧页面,无法自动刷新数据的解决方法
  • 如何使用代理IP解决反爬虫问题
  • QT学习笔记之绘图
  • 大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据
  • 基于QT的C++中小项目软件开发架构源码
  • self-supervised, weakly supervised, and supervised respectively区别
  • 安卓好软-----手机屏幕自动点击工具 无需root权限
  • 【Redis】主从复制(下)--主从复制原理和流程
  • Pencils Protocol上线 Vaults 产品,为 $DAPP 深入赋能
  • uni-app+vue3+pina实现全局加载中效果,自定义全局变量和函数可供所有页面使用
  • 基于SSM+小程序的在线课堂微信管理系统(在线课堂1)(源码+sql脚本+视频导入教程+文档)
  • Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用
  • 儿童手抄报模板-200个(家有神兽必备)
  • 动态规划入门题目->使用最小费用爬楼梯
  • 中间添加一条可以拖拽的分界线,来动态调整两个模块的宽度
  • C++的vector优化
  • 基于飞腾平台的OpenCV的编译与安装
  • pyside6与协程
  • 手机如何五开玩梦幻西游端游?用GameViewer远程手机免费畅玩梦幻西游
  • 【笔记】X射线物理基础
  • Vue3与Flask后端Demo
  • 第一本RAG书籍《大模型RAG实战》出版!
  • Pandas -----------------------基础知识(四)
  • 鼎阳加油-IOC关键技术问题的解决记
  • 【HarmonyOS】TaskPool非阻塞UI
  • 关于使用/bin/sh -c 用于Dockerfile的Entrypoint的问题
  • JS---获取浏览器可视窗口的尺寸
  • 对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击
  • GPU并行效率问题——通过MPS提升GPU计算收益
  • patch 命令:补丁的应用