ECMAScript 新特性( •̀ ω •́ )✧ 笔记(bu quan)~

123 阅读1分钟

ES2021-ES12 😎

String.protype.replaceAll

/**
 * @description: 替换sql语句的变量
 * @param {string} template 'sum(irate(LogAlertLogCommon{namespace='${projectName}', app=~'.*${appName}'}[5m])) by (metric)'
 * @param {object} data {projectName: 'op', appName: 'cmdb'}
 * @return {string} 'sum(floor(increase(LogAlertLogCommon{namespace='op', app=~'.*cmdb'}[900s]))) by (metric)'
 */
export function sqlTransform(template = '', data = {}) {
  let sql = template;
  Object.keys(data).forEach((key) => {
    sql = sql.replaceAll(`\${${key}}`, data[key]);
  });
  return sql;
}

Promise.any

  • 接收一个 promise 可迭代对象数组,只要其中任意一个 promise 成功,就返回那个已经成功的 promise
  • 如果所有的 promises 都失败/拒绝,就返回一个失败的 promise
const pErr = new Promise((resolve, reject) => {
  setTimeout(reject, 1000, "1000的pErr");
});

const pFast = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, "2000的pFast");
});

const pSlow = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, "3000的pSlow");
});

Promise.any([pErr, pSlow, pFast]) // 返回最先成功的一个promise
  .then((value) => {
    console.log(value); // "pFast"
  })
  .catch((err) => {
    console.log(err); // 所有的 promise 都失败时触发
  });
  
Promise.race([pErr, pSlow, pFast]) // 返回最先完成的一个promise
  .then((value) => {
    console.log(value);
  })
  .catch((err) => {
    console.log(err);  // "pErr"
  });

逻辑赋值运算符

  • ||=
  • &&=
  • ??=
var x;
const y = 5;
console.log((x ??= y)); // 即:x = x ?? 5;

ES2020-ES11 😃

操作符

JS 中假值包含:undefined、null、0、NaN、false、''

  • ?? 第一个参数不是 null/undefined,返回第二个参数
  • ?. 当引用为null/undefined时,表达式停止计算并返回 undefined
var person = {
  name: "xx",
  age: 18
};
console.log(person.hometown?.name); // undefined

ES2019-ES10 😄