String.replaceAll

const str1 = "Hello World";
console.log(str1.replaceAll("l", "~")); // "He~~o Wor~d"
// console.log(str1.replace(/l/g, "~"));

const str2 = "I'm [Mike]. This is Tom's [Car].";
console.log(str2.replaceAll("[", "~").replaceAll("]", "~"),); // "I'm ~Mike~. This is Tom's ~Car~."
// console.log(str2.replace(/\[/g, "~").replace(/\]/g, "~"));

Promise.any

const rejPromise = new Promise((res, rej) => {
  setTimeout(() => {
    rej("FAIL...");
  }, 1000);
});

const resPromise = new Promise((res, rej) => {
  setTimeout(() => {
    res("SUCCESS");
  }, 2000);
});

// Promise.race: promise 중에 가장 먼저 완료된 결과값으로 이행/거부 
Promise.race([rejPromise, resPromise])
  .then(() => console.log('성공'))
  .catch(e => console.log(e));

// Promise.any: promise 중에 가장 먼저 이행된 객체 반환
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";

// ||: 앞의 값이 false 이면 뒤의 값
// ??: 앞의 값이 null이나 undefined 이면 뒤의 값

let num  = 0 ;
let a = num || 3; 
console.log(a); // 3

let b = num ?? 3;
console.log(b); // 0

Numeric separators

let billion = 1000000000 // 10억
let billion = 1_000_000_000 // 10억

WeakRef; Weak Reference

// 약한 참조 = Garbage collector 대상
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)// <- obj(강한참조), GC대상아님
	}
	get(key){
		let cachedRef = this.cache[key].deref()
		if(cacheRef){
			return cacheRef;
		} else {
			return false;
		}	
	}
}
profile
성장하는 개발자 유슬이 입니다!

0개의 댓글