"??" 는 변수가 null 또는 undefined인 경우 대체 값을 지정하는데 사용하는 논리 연산자이다.
이 연산자는 왼쪽 피연산자가 null 또는 undefined일 때만 오른쪽 피연산자를 반환한다. 그 외의 경우는 왼쪽 피연산자를 반환한다.
코드로 예시를 들자면
const someValue = null;
const defaultValue = "Default value";
const result = someValue ?? defaultValue;
console.log(result); // 출럭: "Default value"
위 예제에서 someValue
는 null
이므로 ??
연산자는 defaultValue
를 반환한다.
하지만 someValue
가 0이나 빈 문자열 등 falsy 값이라도, defaultValue
가 반환되는 것이 아니라 someValue
자체가 반환된다.
"!!" 는 Boolean 값을 강제로 변환하는 용도로 사용된다. 이 연산자를 변수나 값 앞에 두 번 사용하면 해당 변수나 값이 Boolean 형태로 변환된다.
이때, 변수 또는 값이 falsy인 경우는 false
로, truthy인 경우에는 true
로 변환된다.
예를 들면
const number= 10;
const truthyString = "Hi";
const falsyValue = 0;
const falsyString = "";
console.log(!!number); // 출력: true
console.log(!!truthyString); // 출력: true
console.log(!!falsyValue); // 출력: false
console.log(!!falsyString); // 출력: false
위 예제에서, number
와 truthyString
은 truthy한 값이므로 !! 연산자로 인해 true
로 변환되었다.
falsyValue
와 falsyString
은 falsy한 값으므로 !! 연산자로 인해 false
로 변환되었다.
이러한 두 가지 오퍼레이터는 각각 null
또는 undefined
인지와 boolean
값으로의 강제 변환을 용이하게 해준다.
Javscript에서 falsy한 값은 조건식에서 false
로 평가되는 값들을 말한다. 즉, 다음과 같은 값들을 falsy한 값으로 간주된다.