* 단축평가(short-circuit evaluation)
- or 연산자의 경우 첫번째 값이 true면 뒤에 값을 볼 필요가 없으므로 첫번째 값이 반환된다. (단축된 평가)
- 만약 첫번째 값이 false면 두번째 값이 반환된다.
- or 연산자는 만약 어떤 값이 Falsy 하다면 대체로 사용 할 값을 지정해줄 때 매우 유용하게 사용 할 수 있다.
- A && B 연산자를 사용하게 될 때에는 A 가 Truthy 한 값이라면, B 가 결과값이 됩니다. 반면, A 가 Falsy 한 값이라면 결과는 A 가 된다.
* 단축평가 활용 예시
- 앞조건이 truthy일때 && 뒤에 무언가를 해야 할 경우
- 앞조건이 falsy일때 || 뒤에 무언가를 해야 할 경우
- null 또는 undefined인 경우를 확인할때
- item이 true이고 뒤에 값이 undefined이므로 단축평가에 의해 뒤의 값인 undefined가 출력된다.
해당 연산자를 이용하면 오류가 아닌 undefined가 출력된다.
- 단축평가를 활용한 기본값 설정
- default parameter는 null과 undefined인 경우 작동한다.
- default parameter 텅텅빈 문자열을 전달하면 작동하지 않는다.
- ||(or)연산자는 falsy한 경우 설정(할당) 0, -0, null, undefined, " "
- 해당 parameter가 falsy할 경우 or 다음의 값이 반환된다.
// 논리연산자 Logical Operator
// && 그리고
// || 또는
// 단축평가: short-circuit evaluation
const obj1 = { name: '🐶' };
const obj2 = { name: '🐱', owner: 'latte' };
// 조건문안에서는 각각의 변수들이 boolean값으로 변환되어 평가된다.
if (obj1 || obj2) {
console.log('둘다 true!');
}
// 조건문 밖에서쓰면 평가를 단축한다. 이를 단축평가라고 한다.
// 첫번째 값이 true이면 두번째 값은 true혹은 false확인을 하지 않고(단축된 평가) 두번째 값이 바로 반환된다.
// 단축되어 평가된다.
let result = obj1 && obj2;
console.log(result); // const obj2 = { name: '🐱', owner: 'latte' };
// or연산자의 경우 첫번째 값이 true면 뒤에 값을 볼 필요가 없으므로 첫번째값이 반환된다. (단축된 평가)
// 만약 첫번째값이 false면 두번째값이 반환된다.
result = obj1 || obj2;
console.log(result); // const obj1 = { name: '🐶' };
// 활용예
// 앞조건이 truthy일때 && 뒤에 무언가를 해야 할 경우
// 앞조건이 falsy일때 || 뒤에 무언가를 해야 할 경우
function changeOwner(animal) {
if (!animal.owner) {
throw new Error('주인이 없어');
}
animal.owner = '바뀐주인!';
}
function makeNewOwner(animal) {
if (animal.owner) {
throw new Error('주인이 있어');
}
animal.owner = '새로운주인!';
}
obj1.owner && changeOwner(obj1);
obj2.owner && changeOwner(obj2);
console.log(obj1);
console.log(obj2);
obj1.owner || makeNewOwner(obj1);
obj2.owner || makeNewOwner(obj2);
console.log(obj1);
console.log(obj2);
// null 또는 undefined인 경우를 확인할때
// item이 true이고 뒤에 값이 undefined이므로 단축평가에 의해 뒤의 값인 undefined가 출력된다.
// 해당 연산자를 이용하면 오류가 아닌 undefined가 출력된다.
let item = { price: 1 };
const price = item && item.price;
console.log(price);
// 기본값을 설정
// default parameter는 null과 undefined인 경우 작동한다.
// default parameter 텅텅빈 문자열을 전달하면 작동하지 않는다.
// ||(or)연산자는 falsy한 경우 설정(할당) 0, -0, null, undefined, ''
// 해당 parameter가 falsy할 경우 or 다음의 값이 반환된다.
function print(message = 'Hi') {
const text = message || 'Hello';
console.log(text);
}
print('안녕!');
print();
print('');