2023.01.20 study
javascript 연산자
- 논리연산자 ( ||(OR) ,&&(AND) , !(NOT)
- 병합연산자 '??' <-- es6문법
- 삼항연산자 a > 10 ? true : false
- es6옵셔녈 체이닝 문법 ?. <-- es6문법
참고 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
https://ko.javascript.info/nullish-coalescing-operator
프로그래머스는 풀었던 문제 새로운 논리 연산자로 다시 풀어보기 및 새로운 문제 하루에 2개 스스로 풀어보기!!
이번 javascript에서 사용하는 연산자들에 대해 알아보자!
result = value1 || value2 || value3;
truthy
를 반환하며 피연산자에 truthy가 하나도 없다면 마지막 피연산자를 반환한다.예)
alert( 1 || 0 ); // 1 (1은 truthy임)
alert( null || 1 ); // 1 (1은 truthy임)
alert( null || 0 || 1 ); // 1 (1은 truthy임)
alert( undefined || null || 0 ); // 0 (모두 falsy이므로, 마지막 값을 반환함)
예)
let firstName = "";
let lastName = "";
let nickName = "바이올렛";
alert( firstName || lastName || nickName || "익명"); // 바이올렛
result = value1 && value2 && value3;
예)
// 첫 번째 피연산자가 truthy이면,
// AND는 두 번째 피연산자를 반환
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 첫 번째 피연산자가 falsy이면,
// AND는 첫 번째 피연산자를 반환하고, 두 번째 피연산자는 무시
alert( null && 5 ); // null
alert( 0 && "아무거나 와도 상관없습니다." ); // 0
☆ &&(AND) 연산자가 첫 번째 falsy를 반환하는 반면, ||(OR)은 첫 번째 truthy를 반환한다는 것
예)
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
예)
let height = null;
let width = null;
// 괄호를 추가!
let area = (height ?? 100) * (width ?? 50);
alert(area); // 5000
문제 :
1. console.log(null || 2 || undefinde) 결과는?
2. console.log(console.log(1) || 2 || console.log(3) ); 결과는?
3. console.log(1 && null && 2); 결과는?
4. console.log( null || 2 && 3 || 4 ); 결과는?
https://ko.javascript.info/logical-operators#ref-1687 문제 참고
조건부 연산자 '?'
예)
let result = condition ? value1 : value2;
//평가 대상인 condition이 truthy라면 value1이, 그렇지 않으면 value2가 반환
let accessAllowed = (age > 18) ? true : false;
//age > 18 주위의 괄호는 생략 가능합니다. 물음표 연산자는 우선순위가 낮으므로 비교 연산자 >가 실행되고 난 뒤에 실행
다중 ‘?’
예)
let age = prompt('나이를 입력해주세요.', 20);
let message = (age < 3) ? '아기야 안녕?' :
(age < 18) ? '안녕!' :
(age < 100) ? '환영합니다!' :
'나이가 아주 많으시거나, 나이가 아닌 값을 입력 하셨군요!';
alert( message );
------ if..else 로 변형한다면.. -------
if (age < 3) {
message = '아기야 안녕?';
} else if (age < 18) {
message = '안녕!';
} else if (age < 100) {
message = '환영합니다!';
} else {
message = '나이가 아주 많으시거나, 나이가 아닌 값을 입력 하셨군요!';
}
문제 :
if를 ?로 교체하기
7.
let result;
if (a + b < 7) {
result = '미만';
} else {
result = '이상';
}
8.
let message;
if (login == '직원') {
message = '안녕하세요.';
} else if (login == '임원') {
message = '환영합니다.';
} else if (login == '') {
message = '로그인이 필요합니다.';
} else {
message = '';
}
--@@옵셔널 체이닝 주의할 점@@--
?. nullish연산자와 함께 쓰면 기본값 주기에 용이하다.
?. 존재하지 않아도 괜찮은 대상에만 사용해야한다.
?. 앞의 변수는 꼭 선언되어 있어야 한다.
?. 은 읽기나 삭제하기에는 사용할 수 있지만 쓰기에는 사용할 수 없다.
예)
let user = {}; // 주소 정보가 없는 사용자
alert( user && user.address && user.address.street ); // undefined, 에러가 발생하지 않음
☆ 옵셔널 체이닝 등장으로..☆
let user = {}; // 주소 정보가 없는 사용자
alert( user?.address?.street ); // undefined, 에러가 발생하지 않음
예) 대괄호 표현식
예) 단락 평가
답 :
1. 2 / 2. 1,2 / 3. null / 4. 3 /5. first, third /
6. 1: a ?? b
a가 null이나 undefined에 해당하지 않으면, a 아니면 b
2. (a !== null && a !== undefined) ? a : b 와 동일한 기능을 수행한다.
3. 괄호 없이 || 나 && 와 사용하지 못한다
/7. let result = (a + b < 4) ? '미만' : '이상';
/8. let message = (login == '직원') ? '안녕하세요.' :
(login == '임원') ? '환영합니다.' :
(login == '') ? '로그인이 필요합니다.' :
'';
마무리하며...
es6문법이 나오면서 보안된건 확실한거지만 장단점이 있는걸 명시해야겠고, 프로그래머스 코딩 입문문제를 풀면서 오늘 새로 배운 연산자를 이용해서 다시 풀어보았다. 처음에는 => ? : 이건 뭘 하라는건가? 뭘까 궁금했는데 오늘 삼항연산을 알고나서 이해할 수 있는 거였다. 배움에는 끝이 없지만,, 배워도 배워도~ 계속 새로운 것들이 넘쳐나는구나!! 이번에는 명절 설을 지내고 나서 나 혼자서 공부할 수 있는 시간이 부족했지만 비겁한 변명일뿐~ 아이들 어린이집 보내고 나 혼자 있을 수 있는 시간에 더 깊이있게 공부해야겠다. 집중하자!! 나도 할 수 있다. I Can Do It!!