본문으로 건너뛰기

단원 연습 문제

자바스크립트 목차조건문제 12개

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 4000

3번 줄의 등호 하나는 묻지 않고 size를 'L'에 다시 붙입니다. 그 값 'L'이 조건이 되는데, 글자가 있는 문자열은 참 같은 값이라 덩어리가 늘 실행됩니다. 그래서 크기와 상관없이 size는 'L', price는 4500이 됐습니다. 'L'로 주문했을 때 맞게 찍힌 것은 우연입니다. 같은지는 === 연산자로 묻습니다(규칙 2).

  • 다르게 고쳐도 되는 곳: if ('L' === size) {처럼 양쪽을 바꿔 써도 같습니다.
  • 흔한 오답은 4번 줄을 고치려는 것입니다. 4번 줄은 덩어리가 실행될 때 할 일일 뿐이고, 덩어리가 늘 실행되는 까닭은 3번 줄의 조건에 있습니다.
  • 1번 줄을 const size = 'S';로 바꾸면 3번 줄이 TypeError로 멈춰 다시 붙이기가 드러납니다. 고칠 곳은 여전히 3번 줄입니다.

다시 볼 레슨: if와 else · 같음과 비교

문제 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).

다시 볼 레슨: &&·||·! · if와 else · 같음과 비교

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

자바스크립트 목차로