ES12新特性

1、逻辑赋值运算符

逻辑赋值运算符:??=&&=||=

let a = true
let b = true
//a &&= b //a=a&&b true
//a ||= b //a=a||b true

let obj = {
    introduction: 0
}
obj.introduction ??= "这个人很懒" //obj.introduction = obj.introduction ?? "这个人很懒"
console.log(obj.introduction) //0

2、数字分隔符

这个新特性是为了方便程序员看代码而出现的,如果数字比较大,那么看起来就不是那么一目了然。
 
分隔符不仅可以分隔十进制,也可以分隔二进制或十六进制的数据,非常好用。

const number = 1_000_000_000_000
const binary = 0b1010_0101_1111_101
const octonary = 0o12_34_56
const hex = 0xA1_B2_C3
console.log(number, binary, octonary, hex) //1000000000000 21245 42798 10597059

3、replaceAll

所有匹配都会被替代项替换。模式可以是字符串或正则表达式,而替换项可以是字符串或针对每次匹配执行的函数。并返回一个全新的字符串。

//将所有wish替换成twj
const str =
    "I wish to wish the wish you wish to wish, but if you wish the wish the witchwishes, I won't wish the wish you wish to wish. ";
const newstr = str.replaceAll("wish", "twj");
console.log(newstr); 

4、Promise.any

只要参数实例有一个变成fulfilled状态,包装实例就会变成fulfilled状态;如果所有参数实例都变成rejected状态,包装实例就会变成rejected状态。
 
Promise.any()Promise.race() 方法很像,只有一点不同,就是 Promise.any() 不会因为某个Promise变成rejected状态而结束,必须等到所有参数Promise变成rejected状态才会结束。

//登录-会员联盟系统(沃尔玛、华润万家、盒马)
let ajax1 = function () {
    return new Promise((resolve, reject) => {
        reject("沃尔玛")
    })
}
let ajax2 = function () {
    return new Promise((resolve, reject) => {
        reject("华润万家")
    })
}
let ajax3 = function () {
    return new Promise((resolve, reject) => {
        resolve("盒马")
    })
}
//只要有一个返回了fulfilled状态的promise对象,那就会进then(谁最快谁进),没有就进catch
Promise.any([ajax1(), ajax2(), ajax3()]).then(res => {
    console.log(res) //华润万家
}).catch(err => {
    console.log("err", err)
})

5、WeakRef

在一般情况下,对象的引用是强引用的,这意味着只要持有对象的引用,它就不会被垃圾回收。只有当该对象没有任何的强引用时,垃圾回收才会销毁该对象并且回收该对象所占的内存空间。
 
而WeakRef允许您保留对另一个对象的弱引用,而不会阻止弱引用对象被垃圾回收。

let target = i;
let wr = new WeakRef(target);

WeakRef实例对象有一个deref()方法,如果原始对象存在,该方法返回原始对象;如果原始对象已经被垃圾回收机制清除,该方法返回undefined。

let target = i;
let wr = new WeakRef(target);
                     
let obj = wr.deref(); //得到原始对象
if (obj) { // target未被垃圾回收机制清除
	// ...
}

6、FinalizationRegistry

清理器注册表功能FinalizationRegistry,用来指定目标对象被垃圾回收机制清除以后,所要执行的回调函数。

let obj = {
    name: "twj"
}
let registry = new FinalizationRegistry(data => {
    console.log("销毁了", data)
})
registry.register(obj, "11111111111111")
//registry.unregister(obj) //取消注册
obj = null //销毁了 11111111111111

使用案例:

let registry = new FinalizationRegistry(data => {
    console.log("销毁了", data)
})

let wmap = new WeakMap()
let like = new WeakRef(document.getElementById("like"))

wmap.set(like.deref(), { click: 0 })

like.deref().onclick = function () {
    let times = wmap.get(like.deref())
    times.click++
    console.log(times.click)
}
setTimeout(() => {
    registry.register(like.deref(), wmap.get(like.deref()).click)
    document.body.removeChild(like.deref())
}, 2000)

上一篇文章下一篇文章
ES11新特性ES13新特性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值