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