단축 평가 : 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하는 것.
let answer = 'Cat' && 'Dog' //'Dog'
여기서 'Cat'은 문자열이니까 truthy한 값이다. 따라서 이 논리 연산의 결과가 true인지 false인지는 오른쪽 항인 'Dog'가 결정을 한다. 그래서 answer는 'Dog'.
let answer = 'Cat' || 'Dog' //'Cat'
'Cat'이 문자열이라 이미 truthy한 값이므로 이 연산자의 결과는 true로 바로 결정이 난다. 따라서 answer는 'Cat'이 된다.
🧩 논리합(||) 연산자
'Cat' || 'Dog' // 'Cat'
false || 'Dog' // 'Dog'
'Cat' || false // 'Cat'
🎲 논리곱(&&) 연산자
'Cat' && 'Dog' // Dog
false && 'Dog' // false
'Cat' && false // false
조건이 truthy일 때 && 무언가를 해야 할 경우,
조건이 falshy일 때 || 무언가를 해야 할 경우에 사용한다.
<Banner>
컴포넌트를 렌더링하고 없다면 렌더링하지 않는다. return (
<div>
{popularMovies.results && <Banner popularMovie={popularMovies.results[0]} />}
</div>
);
let item;
const price = item && item.price;
console.log(price); //undefined
function print(message) {
const text = message || "Hello";
console.log(text);
}
print(); //Hello
'??' null, undefined 인 경우에만 설정
null이나 undefined인 경우에만 뒤에 오는 항을 대입하고 싶은데, 0이나 ''(빈 문자열)을 첫번째 항에 넣어도 falshy한 값으로 인식해서 뒤에 오는 항이 대입이 된다.
그럴 땐 '??' 연산자를 입력해서 첫번째 항에 falshy한 값을 넣어도 null, undefined가 아니라면 truthy한 값으로 인식한다.
let num = 0;
console.log(num || "-1"); //-1 👉 0을 falshy한 값이라고 판단해서 -1 리턴!
console.log(num ?? "-1"); //0 👉 0이 null이나 undefined가 아니기 때문에 0 리턴!
true || true // true
true || false // true
false || true // true
false || false // false
true && true // true
true && false // false
false && true // false
false && false // false