String.replaceAll
const str1 = "Hello World";
console.log(str1.replaceAll("l", "~"));
const str2 = "I'm [Mike]. This is Tom's [Car].";
console.log(str2.replaceAll("[", "~").replaceAll("]", "~"),);
Promise.any
const rejPromise = new Promise((res, rej) => {
setTimeout(() => {
rej("FAIL...");
}, 1000);
});
const resPromise = new Promise((res, rej) => {
setTimeout(() => {
res("SUCCESS");
}, 2000);
});
Promise.race([rejPromise, resPromise])
.then(() => console.log('성공'))
.catch(e => console.log(e));
Promise.any([rejPromise, resPromise])
.then(() => console.log('성공'))
.catch(e => console.log(e));
Logical assignment Operators
function add(num1, num2) {
num1 = num1 || 0;
num2 = num2 || 0;
console.log(num1 + num2);
}
function add(num1, num2) {
num1 ||= 0;
num2 ||= 0;
console.log(num1 + num2);
}
name = name && `Hello ${name}`;
name &&= `Hello ${name}`;
name = name?? "Mike";
name ??= "Mike";
let num = 0 ;
let a = num || 3;
console.log(a);
let b = num ?? 3;
console.log(b);
Numeric separators
let billion = 1000000000
let billion = 1_000_000_000
WeakRef; Weak Reference
let user = { name: "Mike", age: 30 };
const weakUser = new WeakRef(user);
user = null;
const timer = setInterval(()=>{
const wUser = weakUser.deref();
if(wUser){
console.log(wUser.name);
} else {
console.log("제거 되었습니다.");
clearInterval(timer)
}
}, 1000)
class MyCache {
constructor() {
this.cache = {}
}
add(key, obj) {
this.cache[key] = new WeakRef(obj)
}
get(key){
let cachedRef = this.cache[key].deref()
if(cacheRef){
return cacheRef;
} else {
return false;
}
}
}