단축평가?
&&, 에서 왼쪽부터 오른쪽으로 가면서 결과 발생 시 더이상의 논리 평가를 하지 않음 e.g.) C++에서
if(!Q.empty() && Q.front() > 1)
이 상황에서 Q가 비어있어도 Q.front()에서 segmentation fault 발생하지 않던 이유
논리합 ||
왼쪽 피연산자 true 시 바로 왼쪽 것 그대로 반환
- 바꿔 말하면, 왼쪽 false 시 오른쪽 것 그대로 반환
예시
true || false
: 왼쪽 것 true, 오른쪽 보지 않고 true 반환req.body || newBody
: req.body 있으면 req.body 반환, 없으면 newBody 반환true || body
: true 반환body1 || body2
: body1 있을 시 body1 반환, 없으면 body2 반환
헷갈릴만한 것 : “??”
이것 또한 처럼 쓰임. : falsy를 판단(0, “”, false, null, undefined 모두 해당) - ??: null이나 undefined인지를 판단
논리곱 &&
- 왼쪽 피연산자 false 시 오른쪽 보지 않고 왼쪽 것 그대로 반환
- 바꿔말하면, 왼쪽 true 시 오른쪽 값 그대로 반환
- 예시
true && false
: 왼쪽 것 true, 오른쪽 반환 falsereq.body && newBody
: req.body 있으면 newBody 반환, 없으면 req.body 반환true && body
: body 반환body1 && body2
: body1 있을 시 body2 반환, 없으면 body1 반환
단축평가 쓰임 예시
null, undefined 체크
1 2 3 4 5 6
const req = null; 1. const foo = req.body; // TypeError 2. const foo = req && req.body; // 에러 발생 x 출처: https://curryyou.tistory.com/193 [카레유]
매개변수 기본값 세팅(디폴트 값을 만들어줌)
1 2 3 4 5 6 7 8 9
function getName(name){ const yourName = name || "무명"; return yourName; }; getName('정우성') // "정우성" getName(); // "무명" 출처: https://curryyou.tistory.com/193 [카레유]
변수 초기화(if vs 단축평가)
1 2 3 4 5 6 7 8
let res = :""; let cond = true; 1. if(cond) res = 'DD'; 2. res = cond && 'DD'; 출처: https://curryyou.tistory.com/193 [카레유]
Reference)
https://curryyou.tistory.com/193