JavaScript ES12

·

2 min read

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); // 很快完成
})