갈푸라떼
갈푸라떼는 개발중
갈푸라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • CS (0)
      • CSinfo (0)
    • Frontend (15)
      • HTML,CSS (1)
      • Javascript (2)
      • React (0)
      • React Hook (12)
    • Backend (0)
      • Python (0)
      • Node.js (0)
      • php (0)
    • DB (2)
      • MySQL (2)
      • BigQuery (0)
      • Mongodb (0)
    • Study (186)
      • JavaScript (72)
      • JavaScript(Clean code) (50)
      • Node.js (11)
      • HTML,CSS (13)
      • React (30)
      • TypeScript (10)
      • React-Native (0)
    • Error (2)
      • error (2)
    • Git (22)
      • Git (22)
    • Help Coding (4)
      • Useful websites (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • Github

공지사항

인기 글

태그

  • Arrow
  • class
  • prototype
  • 심볼
  • 싱글스레드
  • 스코프 체인
  • 인터프리터
  • symbol
  • ECMAScript
  • this
  • 컴파일러
  • SPREAD
  • 객체타입
  • 정적 레벨
  • PM2
  • function
  • 원시타입
  • structure
  • 렉시컬 환경
  • 프로토타입
  • 상속
  • 이터러블
  • 오버라이딩
  • Babel
  • 호이스팅
  • nodemon
  • 함수
  • 자바스크립트엔진
  • 실행 컨텍스트
  • 네이밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갈푸라떼

갈푸라떼는 개발중

Study/JavaScript

[JavaScript_study] 논리연산자, 단축평가(short-circuit evaluation)

2022. 4. 12. 17:14

* 단축평가(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('');

'Study > JavaScript' 카테고리의 다른 글

[JavaScript_study] 널 병합 연산자(Nullish Coalescing Operator)  (0) 2022.04.12
[JavaScript_study] 옵셔널 체이닝 연산자 (Optional Chaining Operator)  (0) 2022.04.12
[JavaScript_study] 심볼(Symbol)  (0) 2022.04.12
[JavaScript_study] Map과 Set  (0) 2022.04.12
[JavaScript_study] 구조 분해 할당(Destructuring assignment)  (0) 2022.04.12
    'Study/JavaScript' 카테고리의 다른 글
    • [JavaScript_study] 널 병합 연산자(Nullish Coalescing Operator)
    • [JavaScript_study] 옵셔널 체이닝 연산자 (Optional Chaining Operator)
    • [JavaScript_study] 심볼(Symbol)
    • [JavaScript_study] Map과 Set
    갈푸라떼
    갈푸라떼

    티스토리툴바