4단원 '조건'의 여섯 레슨에서 9문제를 내고, 1~3단원에서 3문제를 섞었습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 출력을 쓰는 문제는 빈칸과 줄바꿈까지 종이에 끝까지 쓴 뒤 정답을 펼치세요. 줄 수를 알려 주지 않는 문제는 마지막 줄까지 다 씁니다. 막히면 정답 앞의 힌트를 먼저 펼칩니다. 점수는 매기지 않습니다.
한 번에 다 풀 필요는 없습니다. 문제 1~10은 폰으로도 풀 수 있고(약 30~40분), 끝의 만들어 보기 둘은 컴퓨터에서 Node로 직접 돌려 봅니다. 이 단원을 건너뛰어도 되는지 보려면 문제 1 · 3 · 4 · 6 · 8 · 9 여섯을 먼저 풀어 보세요(약 15분). 건너뛸지 볼 때는 힌트를 펴지 않고 풉니다. 힌트를 펴고 맞힌 문제나 짐작으로 고른 문제는 틀린 것으로 치고 그 레슨을 봅니다. 모두 맞으면 이 단원 레슨은 건너뛰고, 틀린 문제가 있으면 그 정답 끝의 레슨만 봅니다. 파이썬을 배웠다면 파이썬과 달라지는 곳이 이 여섯에 들어 있습니다(정답의 '파이썬에서는' 줄). 끝의 만들어 보기 둘은 골라서 풉니다.
끝의 두 문제는 프로그램을 직접 만들어 봅니다. 컴퓨터가 있으면 저장해 돌려 맞춰 보고, 폰으로만 본다면 문제에 적힌 값으로 내 코드를 한 줄씩 따라가 나와야 할 화면과 맞춰 봅니다. 실행 결과는 모두 Node 26으로 돌린 것입니다.
문제 1
무엇이 찍힐까요? 두 줄을 글자 그대로 쓰세요.
const a = '900';
console.log(a < '1000');
console.log(Number(a) < 1000);
힌트
2·3번 줄마다 < 연산자 양쪽의 값이 글자인지 수인지부터 보세요.
정답
false
true- 2번 줄: 양쪽이 글자라 첫 글자 '9'와 '1'을 견줍니다. '1'이 앞이라 '900'이 더 크고,
false입니다. - 3번 줄:
Number(a)가 만든 수 900과 수 1000을 견주어true입니다.
흔한 오답은 첫 줄의 true입니다. 따옴표 안의 수도 수로 견준다고 본 것입니다(문자열과 수를 가리지 않는 생각). 글자끼리는 사전처럼 첫 글자부터 견줍니다. 수로 견주려면 3번 줄처럼 Number()로 수를 만든 뒤 견줍니다.
다시 볼 레슨: 같음과 비교
문제 2
카페에 남은 쿠키 15개를 두 손님이 똑같이 나눠 갑니다. 무엇이 찍힐까요? 세 줄을 글자 그대로 쓰세요.
const cookies = 15;
const each = cookies / 2;
console.log(cookies % 2 === 0);
console.log(each === 7);
console.log(each > 7);
힌트
2번 줄에서 each가 어떤 값에 붙는지 먼저 정하세요.
정답
false
false
true- 2번 줄:
/는 소수점 아래까지 나눠 each가 7.5에 붙습니다. - 3번 줄: 계산이 비교보다 먼저라
15 % 2부터 계산합니다. 나머지 1과 0을 견주어false입니다. - 4번 줄:
7.5 === 7은false입니다. - 5번 줄:
7.5 > 7은true입니다.
흔한 오답은 둘째 줄의 true와 셋째 줄의 false입니다. /가 몫 7을 낸다고 본 것입니다(/가 몫이라는 생각). 한 사람 몫을 정수로 나누려면 Math.floor(15 / 2)로 7을 구하고, 남는 1개는 %로 셉니다.
다시 볼 레슨: 사칙 계산과 나머지 · 같음과 비교
문제 3
카페 실내 온도에 따라 할 일을 찍습니다. 무엇이 찍힐까요? 마지막 줄까지 글자 그대로 쓰세요. 오류로 멈추면 찍힌 줄 다음에 오류 메시지의 …Error: 줄만 써도 됩니다.
const temp = 25;
if (temp >= 30)
console.log('에어컨 켬');
console.log('창문 닫음');
if (temp < 30) {
let fan = '선풍기';
}
console.log(fan);
힌트
2번 줄부터 한 줄씩, 그 줄이 실행되는지와 그때 만든 이름을 적어 보세요.
힌트 둘
2번 줄의 if에 드는 문장이 어디까지인지 중괄호로 보세요. 6번 줄의 이름 fan이 어느 중괄호 안에서 만들어졌는지도 봅니다.
정답
창문 닫음 한 줄을 찍고 8번 줄에서 멈춥니다.
창문 닫음main.js:8console.log(fan); ^ ReferenceError: fan is not defined at main.js:8:13- 2·3번 줄:
25 >= 30은false라 if에 든 3번 줄을 건너뜁니다. 중괄호가 없어 if에는 바로 뒤 문장 하나만 듭니다. - 4번 줄: 들여 썼어도 if 밖이라 늘 실행되어
창문 닫음을 찍습니다. - 5·6번 줄:
25 < 30은true라 덩어리 안 6번 줄이let으로 이름 fan을 만들어 '선풍기'에 붙입니다. 이 이름은 그 중괄호 안에서만 살고 7번 줄의}에서 사라집니다. - 8번 줄: 덩어리 밖에는 fan이 없어
ReferenceError로 멈춥니다.
흔한 오답은 첫 줄 없이 선풍기만 쓴 답입니다. 들여 쓴 4번 줄도 if에 든다고 본 것이고(들여쓰기가 덩어리라는 생각), 덩어리 안에서 만든 이름이 밖에서도 남는다고 본 것입니다. 덩어리에 넣을 줄은 중괄호로 감싸고, 밖에서도 쓸 이름은 if 앞에서 만듭니다(규칙 4).
파이썬에서는 들여쓰기가 덩어리를 정하고 if 안에서 만든 이름이 밖에서도 보입니다 — 자바스크립트는 중괄호가 덩어리를 정하고, 그 안에서 let으로 만든 이름은 밖에 없습니다.
다시 볼 레슨: if와 else
문제 4
문을 연 카페에 남은 쿠키가 0개입니다. 아래 sold는 만든 적 없는 이름이라, 부르면 ReferenceError가 납니다. 무엇이 찍힐까요? 마지막 줄까지 글자 그대로 쓰세요.
const left = 0;
const open = true;
console.log(open && left > 0);
console.log(left > 0 && sold());
console.log(open || sold());
console.log(left || 5);
힌트
3~6번 줄마다 연산자 왼쪽의 값을 먼저 적고, 오른쪽 식이 계산되는지 한 줄씩 따라가 보세요.
힌트 둘
줄마다 왼쪽만으로 답이 정해지는지 먼저 보세요.
정답
모두 네 줄입니다.
false
false
true
5- 3번 줄: 왼쪽 open이
true라 오른쪽0 > 0까지 계산하고, 그 값false를 돌려줍니다. - 4번 줄: 왼쪽
0 > 0이false라&&연산자의 답은 이미false입니다. 오른쪽sold()는 부르지 않아 오류가 나지 않습니다. - 5번 줄: 왼쪽 open이
true라||연산자의 답은 이미true이고,sold()를 부르지 않습니다. - 6번 줄: 0은 거짓 같은 값이라
||연산자가 오른쪽까지 계산해 그 값 5를 돌려줍니다.
흔한 오답은 둘째 줄에서 ReferenceError로 멈춘다고 쓴 답입니다. &&·|| 연산자가 늘 양쪽을 다 계산한다고 본 것입니다(양쪽을 다 계산한다는 생각). 왼쪽만으로 답이 나면 오른쪽은 계산하지 않습니다. 넷째 줄을 true로 쓰면 || 연산자가 true·false만 낸다고 본 것입니다. || 연산자는 마지막으로 계산한 쪽의 값을 그대로 돌려줍니다.
다시 볼 레슨: &&·||·! · 참 같은 값과 ??
문제 5
청소년이면 음료를 할인하려고 비교 둘을 이었습니다. 이 코드를 실행하면 어떻게 될까요? 알맞은 것을 고르세요.
const age = 16;
console.log('입장 확인');
if (age >= 13 and age <= 19) {
console.log('청소년');
}
- ①
입장 확인·청소년을 차례로 찍는다 - ②
입장 확인을 찍은 뒤 3번 줄에서SyntaxError로 멈춘다 - ③ 아무것도 찍지 않고
SyntaxError로 멈춘다
힌트
3번 줄에서 비교 둘을 잇는 낱말을 보세요.
힌트 둘
3번 줄의 and가 쓰는 법에 맞는지 보고, 맞지 않으면 그 오류가 언제 걸리는지 봅니다.
정답
③ — 실행 결과는 이렇습니다.
main.js:3if (age >= 13 and age <= 19) { ^^^ SyntaxError: Unexpected identifier 'and'비교 둘을 '그리고'로 잇는 것은 &&입니다. and는 그 자리에 올 수 없는 낱말이라 쓰는 법에 어긋납니다(Unexpected identifier 'and' — 여기서 이름 and는 뜻밖이다). 문법 오류는 실행하기 전에 걸려 1·2번 줄도 실행되지 않습니다. 결과에 at main.js 줄이 없는 것이 문법 오류의 표시입니다. 3번 줄을 if (age >= 13 && age <= 19) {로 고치면 입장 확인과 청소년이 찍힙니다.
- ① 비교 둘을
and로 이어도 된다고 봤습니다. 비교 둘은&&연산자로 잇습니다. - ② 문법 오류인데 앞줄은 실행된다고 봤습니다. 자바스크립트는 실행하기 전에 파일 전체가 문법에 맞는지 먼저 봅니다.
파이썬에서는 and · or · not과 elif — 자바스크립트는 && · || · ! 연산자와 else if이고, and·elif는 SyntaxError입니다.
문제 6
카페 주문 앱이 장바구니와 쿠폰을 봅니다. 장바구니는 아직 비었고, 쿠폰은 0장입니다. 무엇이 찍힐까요? 마지막 줄까지 글자 그대로 쓰세요.
const cart = [];
const coupon = 0;
if (cart) {
console.log('장바구니 있음');
}
console.log(cart === []);
console.log(coupon || '없음');
console.log(coupon ?? '없음');
힌트
3번 줄의 조건 자리에 오는 값, 6번 줄 === 연산자 양쪽의 배열, 7·8번 줄의 coupon 값을 먼저 적어 보세요.
힌트 둘
3번 줄의 빈 배열 []이 거짓 같은 값 여덟에 드는지 보세요. 6번 줄은 양쪽이 같은 배열 하나인지 봅니다. 7·8번 줄은 연산자를 견줍니다.
정답
모두 네 줄입니다.
장바구니 있음
false
없음
0- 3·4번 줄: 빈 배열은 거짓 같은 값 여덟에 들지 않아 참 같은 값입니다. 그래서 장바구니가 비었는데도
장바구니 있음을 찍습니다. - 6번 줄: 오른쪽의
[]는 이 줄에서 새로 만든 다른 빈 배열입니다. 배열끼리 견주면===연산자는 같은 배열 하나인지를 물어false입니다. - 7번 줄: 0은 거짓 같은 값이라
||연산자가 오른쪽 '없음'을 돌려줍니다. - 8번 줄: 0은
null·undefined가 아니라??연산자는 0을 그대로 둡니다.
흔한 오답은 첫 줄 없이 세 줄만 쓴 답입니다. 빈 배열을 거짓 같은 값으로 본 것입니다. 둘째 줄을 true로 쓰면 담긴 값이 같으면 같은 배열이라고 본 것입니다. 장바구니가 비었는지는 cart.length === 0으로 묻습니다. 넷째 줄을 없음으로 쓰면 ?? 연산자도 || 연산자처럼 0을 지운다고 본 것이고, 셋째 줄을 0으로 쓰면 두 연산자를 거꾸로 본 것입니다.
파이썬에서는 빈 리스트가 거짓이고 cart == []가 True — 자바스크립트는 빈 배열도 참 같은 값이고, 배열끼리 === 연산자로 견주면 false입니다.
다시 볼 레슨: 참 같은 값과 ?? · 같음과 비교
문제 7
기차표의 좌석 번호 'C-14'에서 글자를 꺼냅니다. 무엇이 찍힐까요? 마지막 줄까지 글자 그대로 쓰세요.
const seat = 'C-14';
console.log(seat.slice(0, 1));
console.log(seat[-1]);
console.log(seat.at(-2));
console.log(seat[4] ?? '없음');
힌트
'C-14'의 글자마다 자리 번호를 0부터 적어 보세요.
정답
모두 네 줄입니다.
C
undefined
1
없음- 2번 줄:
slice(0, 1)은 0번 자리부터 1번 자리 바로 앞까지라 'C' 한 글자입니다. - 3번 줄: 대괄호에 음수를 넣으면 뒤에서 세지 않습니다. -1이라는 자리는 없어
undefined입니다. - 4번 줄:
at(-2)는 뒤에서 둘째 글자 '1'입니다. - 5번 줄: 4번 자리는 없어
seat[4]는undefined이고,??연산자가 오른쪽 '없음'을 돌려줍니다.
흔한 오답은 첫 줄의 C-입니다. 자르기에 끝 번호의 글자도 든다고 본 것입니다(끝도 든다는 생각). 마지막 줄 대신 오류를 쓰면 없는 자리를 꺼내면 바로 오류가 난다고 본 것입니다(없으면 오류라는 생각). 없는 자리는 오류 없이 undefined를 줍니다.
파이썬에서는 seat[-1]이 끝 글자 '4' — 자바스크립트는 undefined이고, 끝 글자는 seat.at(-1)입니다.
다시 볼 레슨: 인덱스와 자르기 · 참 같은 값과 ??
문제 8
수영 강습 단계마다 들을 반을 찍습니다. 무엇이 찍힐까요? 마지막 줄까지 글자 그대로 쓰세요.
const level = 2;
switch (level) {
case 1:
console.log('초급');
case 2:
console.log('중급');
case 3:
console.log('고급');
break;
default:
console.log('없는 단계');
}
힌트
2번 줄부터 실행되는 줄을 차례로 적어 보세요.
힌트 둘
level과 같은 case로 들어간 뒤, 그 아래에서 처음 만나는 break가 어디인지 보세요.
정답
모두 두 줄입니다.
중급
고급- 2·5번 줄: level 2를 위에서부터 case 값과
===연산자로 견주어, 같은 5번 줄case 2로 갑니다. - 6번 줄:
중급을 찍습니다. 그 아래에break가 없어 7번 줄의 case는 견주지 않고 8번 줄로 흘러내립니다. - 8·9번 줄:
고급을 찍고break에서 switch를 나갑니다. default 아래 11번 줄은 실행되지 않습니다.
흔한 오답은 중급 한 줄입니다. break 없이도 그 case 덩어리에서 멈춘다고 본 것입니다. 없는 단계까지 세 줄을 쓰면 break를 만나도 끝까지 흘러내린다고 본 것입니다. switch는 break를 만나야 나가고, 만나면 바로 나갑니다.
다시 볼 레슨: switch와 조건 연산자
문제 9
하고 싶은 일마다 쓸 기호나 낱말을 하나씩 쓰세요. 다섯 다 쓴 뒤 정답을 펼치세요.
- (가) 두 값이 종류까지 같은지 묻는다
- (나) 위의 조건이 거짓일 때만 다른 조건을 하나 더 본다
- (다) 두 조건이 모두 참일 때만 참이 된다
- (라) 값이
null이나undefined일 때만 기본값을 고른다 - (마) 참·거짓 값 가운데 참을 코드에 바로 적는다
힌트
(가)~(마)마다 4단원 레슨에서 그 일을 한 코드 한 줄을 떠올려 보세요.
힌트 둘
다섯 가운데 셋은 기호이고, 하나는 두 낱말을 띄어 쓰는 갈래 머리, 하나는 값입니다.
정답
받는 답: (가) === · (나) else if · (다) && · (라) ?? · (마) true
- 같은 답으로 치는 꼴: 괄호와 중괄호까지 쓴
} else if (…) {. - 틀리는 꼴
==— (가)에: 종류가 다르면 한쪽을 바꿔 견주어10 == '10'이true입니다.=는 묻지 않고 이름을 값에 붙입니다. - 틀리는 꼴
elif·elseif— (나)에: 그런 낱말이 없어 문법 오류(SyntaxError)입니다.if만 쓰면 따로 선 if가 되어 앞 갈래와 상관없이 조건을 새로 봅니다. - 틀리는 꼴
and— (다)에: 문법 오류입니다.||연산자는 한쪽만 참이어도 참입니다. - 틀리는 꼴
||— (라)에: 0과 빈 문자열까지 거짓 같은 값으로 쳐서 기본값으로 바꿉니다. - 틀리는 꼴
True— (마)에: 대문자로 시작하면 값이 아니라 만든 적 없는 이름으로 읽혀ReferenceError로 멈춥니다(True is not defined).
파이썬에서는 elif · and · True — 자바스크립트는 else if · && · true입니다.
다시 볼 레슨: 같음과 비교 · else if로 여러 갈래 · &&·||·! · 참 같은 값과 ??
문제 10
음료 크기가 L이면 500원을 더하려 합니다. 'L'로 주문하면 L 4500이 맞게 찍히는데, 'S'로 주문해도 아래처럼 찍힙니다. 'S'면 S 4000이 나와야 합니다. 몇 번 줄의 무엇을 고쳐야 할까요? 고친 줄을 쓰세요.
let size = 'S';
let price = 4000;
if (size = 'L') {
price = price + 500;
}
console.log(size, price);
L 4500힌트
찍힌 두 값 가운데 price만 틀린 것이 아닙니다. 1번 줄 뒤로 size가 어디서 다른 값에 붙는지 봅니다.
정답
3번 줄을 if (size === 'L') {로 고칩니다.
let size = 'S';
let price = 4000;
if (size === 'L') {
price = price + 500;
}
console.log(size, price);S 40003번 줄의 등호 하나는 묻지 않고 size를 'L'에 다시 붙입니다. 그 값 'L'이 조건이 되는데, 글자가 있는 문자열은 참 같은 값이라 덩어리가 늘 실행됩니다. 그래서 크기와 상관없이 size는 'L', price는 4500이 됐습니다. 'L'로 주문했을 때 맞게 찍힌 것은 우연입니다. 같은지는 === 연산자로 묻습니다(규칙 2).
- 다르게 고쳐도 되는 곳:
if ('L' === size) {처럼 양쪽을 바꿔 써도 같습니다. - 흔한 오답은 4번 줄을 고치려는 것입니다. 4번 줄은 덩어리가 실행될 때 할 일일 뿐이고, 덩어리가 늘 실행되는 까닭은 3번 줄의 조건에 있습니다.
- 1번 줄을
const size = 'S';로 바꾸면 3번 줄이TypeError로 멈춰 다시 붙이기가 드러납니다. 고칠 곳은 여전히 3번 줄입니다.
문제 11 (만들어 보기)
서점 계산대에서 쓸 할인 계산기를 만들어 봅니다. 책값 합계가 25000원 이상이면 2500원, 12000원 이상이면 1000원을 빼고, 그 밖에는 빼지 않습니다. 할인 금액과 낼 돈을 찍습니다. 합계가 27000원이면 이렇게 나와야 합니다.
할인 2500원
낼 돈 24500원
아래 뼈대의 주석 셋 아래를 채우세요. 다 쓰면 1번 줄의 합계를 12000과 9000으로 바꿔 따라가 봅니다. 12000이면 할인 1000원 · 낼 돈 11000원, 9000이면 할인 0원 · 낼 돈 9000원이 나와야 합니다.
const total = 27000;
// 1. 조건 세우기
// 2. 갈래마다 할 일
// 3. 갈래 뒤 공통
힌트
주석 셋마다 그 아래에서 할 일을 말로 한 줄씩 먼저 적어 보세요.
힌트 둘
'1. 조건 세우기'에서 두 조건의 값에 깃발 이름을 붙입니다. '2. 갈래마다 할 일'에서는 덩어리 밖에서도 쓸 할인 금액 이름을 if 앞에서 먼저 0에 붙입니다. 낼 돈은 합계에서 할인 금액을 뺀 것입니다.
정답
모범 답입니다.
const total = 27000;
// 1. 조건 세우기
const big = total >= 25000;
const mid = total >= 12000;
// 2. 갈래마다 할 일
let off = 0;
if (big) {
off = 2500;
} else if (mid) {
off = 1000;
}
// 3. 갈래 뒤 공통
const pay = total - off;
console.log(`할인 ${off}원`);
console.log(`낼 돈 ${pay}원`);할인 2500원
낼 돈 24500원12000이면 big은 false, mid는 12000 >= 12000이라 true여서 off가 1000에 붙습니다. 9000이면 둘 다 false라 off는 0 그대로입니다.
- 다르게 써도 되는 곳: 깃발 없이
if (total >= 25000) {처럼 조건을 바로 써도 됩니다.let off = 0;대신 끝에else갈래를 두고 0에 붙여도 됩니다. 이름은 달라도 됩니다. 12000원 조건의 if 다음에 25000원 조건의 if를 따로 두어도, 뒤 if가 off를 다시 붙여 세 시험 값이 맞습니다. 다만 갈래가 늘면 차례를 따져야 하니else if로 씁니다. - 찍은 화면이 위와 같고 둘째 · 셋째 시험 값(12000 · 9000)도 맞으면 맞습니다.
- 흔한 오답 하나는 넓은 조건(12000원 이상)을 위에 두는 것입니다. 27000원도 그 갈래에 먼저 걸려 아래 갈래는 실행되지 않습니다. 모범 답의 차례 그대로(25000원 조건 다음 12000원 조건)
else if대신 if를 둘 쓰는 것도 27000원에서할인 1000원이 됩니다.
const total = 27000;
const big = total >= 25000;
const mid = total >= 12000;
let off = 0;
if (mid) {
off = 1000;
} else if (big) {
off = 2500;
}
const pay = total - off;
console.log(`할인 ${off}원`);
console.log(`낼 돈 ${pay}원`);할인 1000원
낼 돈 26000원>=대신>연산자를 쓰면 12000에서할인 0원이 찍힙니다. off를 덩어리 안에서let off = 2500;처럼 만들면 그 이름은 중괄호 밖에서 없어 찍는 줄에서ReferenceError로 멈춥니다(규칙 4).
다시 볼 레슨: else if로 여러 갈래 · if와 else
문제 12 (만들어 보기)
이번에는 빈 데서 씁니다. 도서관 대출 창구입니다. 회원이고 연체한 날이 0일이면 대출 가능을, 아니면 대출 불가를 찍고, 어느 쪽이든 마지막에 반납일 확인을 찍습니다. 회원인지는 const member = true;, 연체한 날은 const late = 2;로 두고 시작합니다. 이렇게 나와야 합니다.
대출 불가
반납일 확인
다 쓰면 late만 0으로 바꿔 따라가 봅니다. 대출 가능 · 반납일 확인이 나와야 합니다. 그다음 late는 0인 채로 member를 false로 바꾸면 다시 대출 불가 · 반납일 확인이 나와야 합니다.
힌트
하위 목표 셋의 주석(1. 조건 세우기 · 2. 갈래마다 할 일 · 3. 갈래 뒤 공통)을 먼저 쓰고, 그 아래를 채웁니다.
정답
모범 답입니다.
// 1. 조건 세우기
const member = true;
const late = 2;
const ok =
member && late === 0;
// 2. 갈래마다 할 일
if (ok) {
console.log('대출 가능');
} else {
console.log('대출 불가');
}
// 3. 갈래 뒤 공통
console.log('반납일 확인');대출 불가
반납일 확인4~5번 줄은 한 문장입니다. late가 0이면 ok는 true && true라 true이고, member가 false면 왼쪽만으로 false입니다.
- 다르게 써도 되는 곳: 깃발 없이
if (member && late === 0) {로 써도 됩니다. 연체한 날은 0이거나 그보다 크니member && !late도 같은 판정입니다(0은 거짓 같은 값). - 찍은 화면이 위와 같고 둘째 · 셋째 시험 값도 맞으면 맞습니다.
- 흔한 오답 하나는
&&연산자 자리에||연산자를 쓰는 것입니다. 회원이기만 하면 참이 되어 첫 시험 값에서대출 가능이 찍힙니다. - 다른 흔한 오답은
late === 0자리에 등호 하나를 쓰는 것입니다. 등호 하나를 같은지 묻는 기호로 본 것입니다(등호 하나로 같은지 묻는다는 생각).=는&&보다 나중에 묶여,member && late라는 식 전체를 0에 붙이려는 문장이 됩니다. 등호 왼쪽이 이름이 아니라서 실행하기 전에SyntaxError로 멈추고, 아무것도 찍히지 않습니다.if (member && late = 0) {로 써도 같습니다.
const member = true;
const late = 2;
const ok =
member && late = 0;
console.log(ok);main.js:4 member && late = 0; ^^^^^^^^^^^^^^ SyntaxError: Invalid left-hand side in assignment반납일 확인을 찍는 줄을 else 덩어리 안에 두면 대출 가능일 때 찍히지 않습니다. 갈래 뒤 공통 줄은 마지막}아래에 둡니다(규칙 4).