JS Quiz 9월 해설

cansweep·2022년 10월 5일
0

JS Quiz

목록 보기
1/1
post-thumbnail

😃 JS Quiz 소개

You Don't Know JS 책을 읽고 만든 문제들을 공유합니다.
문제와 해설은 직접 작성하였으며 문제는 github에, 해설은 velog에 업로드합니다.
틀린 부분이 있을 수 있으니 언제든지 지적해 주세요.

JS Quiz 문제만 보러가기

📃 문제 해설

1. 프로토타입을 사용할 수 있는 예시를 설명해 주세요.

변수에 적절한 타입의 값이 할당되지 않았을 때 prototype을 이용해 빈 함수 또는 빈 배열 등의 값으로 초기화할 수 있습니다.

prototype을 사용하지 않고 function() {}, [] 등의 값으로 초기화하게 되면 함수 호출 시마다 디폴트 값을 생성하지만 prototype은 생성되어 내장된 상태이기 때문에 한 번만 생성되어 메모리 낭비를 줄일 수 있습니다.

2. +와 - 연산이 이루어지는 과정을 설명해 주세요.

+ 연산자문자열 붙이기숫자 더하기 연산의 두 가지 목적으로 사용할 수 있습니다.
한쪽 피연산자가 문자열이거나 문자열 표현형으로 나타낼 수 있을 경우 문자열 붙이기 연산을 합니다.

예를 들어 객체는 문자열 표현형으로 나타낼 수 있으므로 객체와의 + 연산은 문자열 붙이기 연산이 됩니다.

const a = [1];
const b = [2];
const c = a + b;

console.log(c); // "12"
console.log(typeof c); // "string"

- 연산자는 +와 달리 숫자 뺄셈 연산만 존재합니다.
따라서 문자열 표현형으로 나타낼 수 있을 경우 문자열로 강제 변환한 뒤 이를 또 숫자로 강제변환하여 숫자 뺄셈 연산을 진행합니다.

const a = [1];
const b = [2];
const c = a - b;

console.log(c); // -1
console.log(typeof c); // "number"

3. 출력될 값을 적고 이유를 설명해 주세요.

const a = 42;
const b = null;
const c = "";

console.log(a && b && c);

출력될 값은 null 입니다.

&& 연산자는 첫 번째 피연산자의 평가 결과가 truthy일 때에만 두 번째 피연산자를 선택합니다.
따라서 42 && null은 42가 truthy이므로 평가 결과가 null이 됩니다.
null && ""은 null이 falsy이므로 평가 결과가 null이 됩니다.

falsy값
undefined, null, +0, -0, NaN, false, ""
truthy 값
falsy가 아닌 값들

4. "" == false의 계산 결과와 변환 과정을 설명해 주세요.

계산 결과는 true입니다.

느슨한 동등비교에서 두 피연산자가 비 불리언과 불리언일 경우 불리언이 숫자로 강제 변환됩니다.
따라서 "" == false의 식은 다음의 계산 과정을 거칩니다.

"" == 0 // 1. false가 숫자 0으로 강제 변환
0 == 0  // 2. 문자열 ""이 숫자 0으로 강제 변환
true

5. 출력될 값을 적고 이유를 설명해 주세요.

const a = b = ["13"];
console.log(["13"] == ["13"]);
console.log(a == b);

출력될 값은 false, true 입니다.

느슨한 동등비교 연산 시 두 피연산자가 모두 객체일 경우 두 피연산자가 동일한 객체를 참조할 때에만 평가 결과가 true가 됩니다.

따라서 첫 번째 콘솔 로그의 경우에는 두 피연산자가 동일한 객체를 참조하지 않기 때문에 평가 결과가 false이고 두 번째 콘솔 로그의 경우 두 피연산자가 동일한 객체를 참조하고 있기 때문에 평가 결과가 true입니다.

보통 느슨한 동등비교 시 강제 변환을 통해 식이 평가되지만 객체 간의 동등 비교 시에는 강제 변환이 일어나지 않습니다.

profile
하고 싶은 건 다 해보자! 를 달고 사는 프론트엔드 개발자입니다.

0개의 댓글