Skip to main content

Command Palette

Search for a command to run...

JavaScript ES12

Published
2 min read
JavaScript ES12

1. 逻辑赋值运算符

逻辑空赋值 (??=)
逻辑与赋值 (&&=)
逻辑或赋值 (||=)

let A // 当 A为 undefined 或者 null 时, ??= 赋值
A ??= 12 // 12 

let B = 0 // 当 B为 Boolean(B) === false 时, ||= 赋值
B ||= 12 // 12

let C = 12 // 当 C为 Boolean(C) === true 时, &&= 赋值
C &&= 0 // 0

2. String.replaceAll()

let str = 'hotdog dog'
str.replaceAll('dog', 'cat') // 'hotcat cat'
// 类似replace 正则替换
str.replace(/dog/g, 'cat') // 'hotcat cat'

3. 数字分隔符

let billion = 1_000_000_000;
console.log(billion); //output: 1000000000

4. 私有方法、私有属性

class Auth {
  // 私有方法
  #getToken() {
   return "12345678";
  }
  isAuth() {
   return this.#getToken();
  }
}
const auth = new Auth();
auth.getToken(); //output: auth.getToken is not a function
auth.isAuth(); //output: 12345678
class Auth {
   // 私有属性 getter
   get #getToken() {
    return localStorage.getItem('token');
   }
   // 私有属性 setter
   set #setToken(token) {
    localStorage.setItem('token', token);
   }
   set login(token) {
    this.#setToken = token;
   }
   get isAuth() {
    return this.#getToken;
   }
}
let token = '12345678';
const auth = new Auth();
auth.login = token;
auth.isAuth; //output: 12345678

5. WeakRef 弱引用

顾名思义,WeakRef是对另一个对象的弱引用。只要不是强引用,弱引用的对象就不会保存在内存中。 JavaScript 使用其垃圾收集算法来清除内存中不再被其他对象引用的对象。所以,当我们创建一个 WeakRef 对象时,它可以随时被垃圾回收。

const student = {
    name: 'John Doe',
    age: 20,
    address: {
      number: 365,
      street: 'Flower street'
    }
  }
const ref = new WeakRef(student);
ref.deref().age;
//output: 20

如果弱引用在内存中仍然可用,我们可以使用deref()方法来访问它。 尽管 WeakRef 对节省一些内存很有用,但 WeakRef 的作者建议尽可能避免使用它,原因是不同 JavaScript 引擎中垃圾收集器的复杂行为。

6. Promise.any()

这个方法用于返回第一个成功的 promise 。只要有一个 promise 成功此方法就会终止,它不会等待其他的 promise 全部完成。

const pErr = new Promise((resolve, reject) => {
  reject("总是失败");
});

const pSlow = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, "最终完成");
});

const pFast = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "很快完成");
});

Promise.any([pErr, pSlow, pFast]).then((value) => {
  // pFast fulfils first
  console.log(value); // 很快完成
})
61 views

More from this blog

Object.freeze() vs Object.seal() vs Object.preventExtensions()

今日详解ES5相关知识,区分下这三者的关系 Object.freeze() 冻结一个对象。这实际上是使对象不可变的最严格的方法。它执行以下操作: 防止添加新属性 不允许删除现有属性 不允许更改的直接属性 可以修改子对象的属 Object.seal() 封闭对象,防止向对象添加新属性。它执行以下操作: 允许更改对象的现有属性 防止添加新属性 不允许删除现有属性 Object.preventExtensions() 防止向对象添加新属性(即防止将来扩展对象)。它执行以下操作: 允许更改...

May 7, 20221 min read87
Object.freeze() vs Object.seal() vs Object.preventExtensions()

解决Virmach Vps, 谷歌搜索频繁人机验证问题

virmach机器速度还可以,但谷歌搜索的时候频繁出现“reCAPTCHA”人机验证,实在无解.. 查得问题是 virmach大部分是 RN、CC机房 IP段可能处于Google黑名单...、 1. 申请IPV6隧道 virmach并不自带ipv6, 则使用IPv6 隧道。 申请 https://tunnelbroker.net [一个账号可以申请 5 个隧道] 注册登陆。 在左侧的 User Functions 中,点击 Create Regular Tunnel. IPv4 E...

Dec 9, 20211 min read287
解决Virmach Vps, 谷歌搜索频繁人机验证问题
L

lolis

12 posts