자바스크립트 오답노트
01. 결괏값을 작성하시오.
{
(function(){
console.log("함수가 실행되었습니다.");
})();
}
정답
함수가 실행되었습니다.
해설
즉시 실행 함수(IIFE)를 사용하여 함수를 선언과 동시에 실행시켰기 때문에 "함수가 실행되었습니다."가 출력됩니다.
02. 결괏값을 작성하시오.
{
function func(str = "함수가 실행되었습니다."){
document.write(str);
}
func();
}
정답
함수가 실행되었습니다.
해설
함수 선언식으로 func 함수를 선언하고, 매개변수로 기본값 "함수가 실행되었습니다."을 설정합니다.
func 함수를 호출할 때 인자를 전달하지 않았으므로 기본값이 출력됩니다.
03. 결괏값을 작성하시오.
{
let sum = 0;
for(var i=1; i<=10; i+=2) {
sum += i;
};
document.write(sum);
}
정답
25
해설
let 키워드를 사용하여 sum 변수를 0으로 초기화합니다.
for 문을 사용하여 i 변수를 1부터 2씩 증가시키면서 sum에 i 값을 누적합니다.
i 값이 10이 될 때까지 반복하며, sum의 최종값인 25가 출력됩니다.
04. 다음의 결괏값을 보고 빈칸을 작성하시오. ( X )
{
const obj = {
a: 100,
b: 200,
c: "javascript"
}
const { a, b, c } = _______;
document.write(a);
document.write(b);
document.write(c);
//100
//200
//javascript
}
정답
obj
해설
const { a, b, c } = obj; 로 작성해야 합니다. 객체에서 비구조화 할당(destructuring assignment)을 사용하여 변수에 객체의 각 속성값을 할당하였습니다.
05. 다음의 결괏값을 보고 빈칸을 작성하시오. ( X )
{
const objA = {
a: 100,
b: 200
}
const objB = {
c: "javascript",
d: "jquery"
}
const spread = {______, ______}
document.write(spread.a);
document.write(spread.b);
document.write(spread.c);
document.write(spread.d);
//100
//200
//javascript
//jquery
}
정답
...objA, ...objB
해설
const spread = {...objA, ...objB}; 로 작성해야 합니다. 전개 구문(spread syntax)을 사용하여 두 객체의 속성들을 병합하고, 새로운 객체 spread에 할당합니다.
06. 다음의 결괏값이 나오도록 보기에서 빈칸에 해당되는 것을 모두 고르시오. ( X )
{
if( _____ ){
document.write("조건문이 실행되었습니다.(true)");
} else {
document.write("조건문이 실행되었습니다.(false)");
}
//document.write("조건문이 실행되었습니다.(false)");
//보기
//true, false, 1, "1", "", 0, null, undefined, [], {}
}
정답
false, "", 0, null, undefined
해설
빈칸에 들어갈 수 있는 정답은 false, 0, null, undefined, "" 등입니다. 이유는 빈 문자열은 falsy 값, 0은 falsy 값, null과 undefined는 falsy 값이며, false는 물론이고 true는 truthy 값이기 때문입니다. 반면, []와 {}는 truthy 값입니다.
07. 다음의 if문은 삼항 연산자로 변경하시오. ( X )
{
if( num == 100 ){
document.write("true");
} else {
document.write("false");
}
}
정답
num == 100 ? document.write("true") : document.write("false")
해설
num == 100 ? "true" : "false"; 로 작성하면 됩니다. 삼항 연산자는 조건문 ? true 일 때의 값 : false 일 때의 값 형식으로 사용합니다.
08. 다음의 결괏값을 작성하시오!
{
for(var i=1; i<=1; i++){
document.write(i);
for(var j=1; j<=5; j++){
document.write(j);
}
}
}
정답
1
1,2,3,4,5
해설
위 코드에서 외부 for 루프의 조건식에서 i는 1 이하의 값이 되므로 내부 for 루프는 한 번만 실행되며, 내부 for 루프에서는 1~5의 숫자를 순서대로 출력합니다. 외부 for 루프에서는 i를 출력하고, 내부 for 루프에서 출력한 숫자를 함께 출력합니다.
09. 다음의 결괏값을 보고 빈칸을 작성하시오!
{
const num = [100, 200, 300, 400, 500];
for(let i=0; i<num.length; i++){
document.write(_______);
}
//100 200 300 400 500
}
정답
num[i]
해설
위 코드에서 num 배열의 각 요소를 순회하면서 해당 요소를 출력하면 됩니다. num[i]를 출력하면 되므로 빈칸에는 num[i]를 넣으면 됩니다.
10. 다음의 결괏값을 보고 빈칸을 작성하시오!
{
const num = [100, 200, 300, 400, 500];
num.forEach(function(el){
document.write(________);
});
//100 200 300 400 500
}
정답
el
해설
위 코드에서 num 배열의 각 요소를 순회하면서 해당 요소를 출력하면 됩니다. forEach() 메소드는 배열의 각 요소를 인자로 받아 함수를 실행하므로, 함수 내에서 해당 요소를 출력하면 됩니다. 따라서 빈칸에는 el을 출력하는 코드인 document.write(el)를 넣으면 됩니다.
11. 다음을 보고 리턴값을 생략하여 한줄로 표현하시오! ( X )
{
const func = str => {
return str;
}
}
정답
const func = str => str
해설
이 함수는 입력값으로 받은 문자열을 반환하는 함수이다. 이 함수의 구현 내용을 보면, 입력 매개변수 str을 그대로 반환하는 구문이 포함되어 있다.
12. 다음의 결괏값을 보고 빈 칸을 채우시오.
{
const num = [100, 200, 300, 400, 500];
for(let index of _____ ){
document.write(index);
}
//결과값
//100 200 300 400 500
}
정답
num
해설
for ... of 구문은 배열을 순회할 때 사용된다. 배열을 순회하면서 각 요소를 index 변수에 할당하고, document.write()를 사용하여 각 요소를 출력하면 된다.
13. 다음의 결괏값을 보고 빈 칸을 채우시오. ( X )
{
function func(){
let i = 5, j = 4, k = 1, l, m;
l = i > 5 || j != 0;
m = j <= 4 && k < 1;
document.write(l);
document.write(m);
}
func();
}
정답
true, false
해설
|| 연산자는 두 개의 피연산자 중 하나라도 true이면 전체 식이 true가 된다. && 연산자는 두 개의 피연산자가 모두 true일 때만 전체 식이 true가 된다.
따라서, l 변수에 대입되는 값은 i > 5가 false이고 j != 0이 true이므로 true가 된다. m 변수에 대입되는 값은 j <= 4가 true이고 k < 1이 false이므로 false가 된다.
14. 다음의 결괏값을 작성하시오.
{
const arr = [100, 200, 300, 400, 500];
const text = arr.push(600);
document.write(arr);
const arr2 = [100, 200, 300, 400, 500];
const text2 = arr2.unshift(600);
document.write(arr2);
}
정답
100,200,300,400,500,600
600,100,200,300,400,500
해설
위 코드는 배열에 요소를 추가하는 push와 unshift 메서드를 사용하는 예제입니다.
먼저 arr 배열에 push(600)을 실행하면, 배열의 맨 끝에 600이라는 요소가 추가됩니다. push 메서드는 새로운 배열의 길이를 반환하므로, text 변수에는 arr 배열의 길이인 6이 저장됩니다.
따라서 document.write(arr)은 배열 arr을 출력하게 되며, [100, 200, 300, 400, 500, 600]이 출력됩니다.
그리고 arr2 배열에 unshift(600)을 실행하면, 배열의 맨 앞에 600이라는 요소가 추가됩니다. unshift 메서드는 새로운 배열의 길이를 반환하므로, text2 변수에는 arr2 배열의 길이인 6이 저장됩니다.
따라서 document.write(arr2)은 배열 arr2을 출력하게 되며, [600, 100, 200, 300, 400, 500]이 출력됩니다.
15. 다음의 결괏값을 작성하시오.
{
const obj = {
a: 100,
b: 200
};
for(let key in obj) {
console.log(key);
}
}
정답
a,b
해설
상수 obj 객체의 for...in 루프는 obj 객체의 모든 키에 대해 루프를 실행합니다. 이 경우 obj 객체에는 a와 b 두 개의 키가 있으므로 루프는 두 번 실행됩니다. 루프의 각 반복에서 key 변수는 현재 루프 반복에서 열거 중인 속성의 이름인 a 또는 b와 같이 객체의 속성 이름으로 설정됩니다. 따라서 첫 번째 반복에서 key 변수는 "a"가 되고, 두 번째 반복에서는 "b"가 됩니다. 각 반복에서 console.log(key)는 "a"와 "b"를 각각 출력합니다.
16. 다음의 결괏값을 작성하시오. ( X )
{
let num = 0;
while(false){
num++;
if( num == 3 ){
continue;
}
if( num > 6 ){
break;
}
}
console.log(num);
}
정답
0
해설
while 루프의 조건식이 false이므로 루프가 한 번도 실행되지 않습니다. 그러므로 num 변수의 값은 초기값 0을 유지하고, console.log(num)은 0을 출력합니다.
17. 다음의 결괏값을 작성하시오. ( X )
{
let a, b, result;
a = 7, b = 4
result = a & b;
console.log(result, a, b)
}
정답
4, 7, 4
해설
비트 AND 연산자 &는 각 비트 위치에서 두 피연산자가 모두 1이면 결과값의 해당 위치를 1로, 그렇지 않으면 0으로 설정합니다. 7은 이진수 0b0111이고, 4는 이진수 0b0100입니다. 따라서 비트 AND 연산 결과는 0b0100이고, 이는 십진수 4와 같습니다. 따라서 console.log(result, a, b)는 4 7 4를 출력합니다.
18. 다음의 결괏값을 작성하시오.
{
let a = 1, b = 2, c = 3, result;
result = ++a + b++ + ++c;
console.log(result);
console.log(a);
console.log(b+c);
console.log(c);
}
정답
8, 2, 7, 4
해설
선 증가(unary operator) ++ 연산자는 피연산자에 1을 더한 후 결과값을 반환합니다. ++a는 a에 1을 더하고, 결과값 2를 반환합니다. b++는 b를 그대로 반환하고, b에는 1이 추가됩니다. 이후 ++c는 c에 1을 더하고, 결과값 4를 반환합니다. 따라서 result 변수에 할당되는 값은 2 + 2 + 4인 8입니다. console.log(result)는 8을 출력합니다.
console.log(a)는 2를 출력합니다. console.log(b+c)는 2 + 4인 6을 출력합니다. console.log(c)는 4를 출력합니다.
19. 다음의 결괏값을 작성하시오. ( X )
{
let data = [70, 80, 75, 60, 90];
let best = 0;
let score = 0;
for(let i=0; i<data.length; i++){
if(data[i]>80) {
best++;
}
if(score < data[i]) {
score = data[i];
}
}
console.log(best, score)
}
정답
1, 90
해설
이 코드는 배열 data에서 80보다 큰 숫자가 몇 개 있는지 그리고 data에서 가장 큰 값을 구하는 코드입니다. 먼저 best와 score 변수를 0으로 초기화합니다. 그런 다음, for 루프를 사용하여 data 배열의 모든 요소를 반복합니다. data[i]가 80보다 큰 경우, best를 1 증가시킵니다. score가 data[i]보다 작은 경우, score를 data[i]로 업데이트합니다. 마지막으로 best와 score를 출력합니다.
20. 다음의 결괏값을 작성하시오.
{
function func(num1, num2){
if(num1 > num2) return num1
else return num2
}
console.log(func(10, 23) + func(40, 50))
}
정답
73
해설
이 코드는 두 개의 숫자를 비교하여 큰 값을 반환하는 함수 func를 정의하고, 이 함수를 두 번 호출한 후에 반환값을 더하여 출력하는 코드입니다.
먼저 func 함수를 정의합니다. 이 함수는 num1과 num2 두 개의 매개변수를 받아서, if문을 사용하여 num1이 num2보다 크면 num1을 반환하고, 그렇지 않으면 num2를 반환합니다.
그런 다음, console.log를 사용하여 func(10, 23)과 func(40, 50)를 호출하고, 반환값을 더하여 출력합니다. func(10, 23)의 반환값은 23이고, func(40, 50)의 반환값은 50입니다.