공부/오답노트

2023. 03. 24 / 자바스크립트 테스트 & 오답노트 4-1

우당당쿵당콩탕 2023. 3. 27. 00:43
728x90
반응형

01. 결과값을 작성하시오.

{
    const str = "javascript";

    const text = str.indexOf("a");
    const text2 = str.lastIndexOf("a");
    const text3 = str.includes("a");

    console.log(text);
    console.log(text2);
    console.log(text3);
}
더보기

해설

indexOf()

문자열을 검색하여 주어진 값과 일치하는 첫 번째 위치값(index)를 반환합니다.

문자열이 포함되어 있으면 1을 반환하며 포함되어 있지 않으면 -1을 반환합니다.

 

lastIndexOf()

문자열을 역순으로 검색하여, 주어진 값과 일치하는 첫 번째 위치값(index)를 반환합니다.

문자열이 포함되어 있으면 1을 반환하며 없으면 -1을 반환합니다.

 

indexOf()

해당 문자열 포함 여부를 검색하여 불린(true, false)을 반환합니다.

대소문자를 구별합니다.

 

1 , 3, true


02. 다음의 결괏값을 보고 빈칸을 채우시오.

{
    function func(){
        document.write("함수2가 실행되었습니다.");
    }
    function callback(str){
        document.write("함수1가 실행되었습니다.");
        _______();
    }
    callback(func);

    //함수1가 실행되었습니다.
    //함수2가 실행되었습니다.
}
더보기

해설

콜백 함수에 대한 문제입니다.

func()는 어떤 일을 수행하는 함수이고, callback()은 다른 함수를 인수로 받는 함수입니다.

callback()함수를 호출할 때 func()함수를 인수로 전달하여 실행할 수 있게 됩니다.

 

str


03.결과값을 작성하시오.

{
    function func(a, b){
        console.log(arguments[0]);
        console.log(arguments[1]);
    }
    func("1", "2");
}
더보기

해설

arguments 함수에 대한 예제입니다.
 
func(a,b)함수는 두 개의 매개변수인 a와 b를 갖고 있습니다. 
하지만 함수 내부에서 arguments 객체를 이용하여 인수를 확인하고 있습니다. 
arguments 객체는 함수 내부에서 인수를 배열 형태로 저장하고 있습니다.
따라서 func("1", "2")를 호출하면,
console.log(arguments[0]);는 "1"을 출력하고, console.log(arguments[1]);은 "2"를 출력합니다. 
 
1,2

04.결과값을 작성하시오.

{
    function func(num, name, word){
        this.num = num;
        this.name = name;
        this.word = word;
    }
    
    func.prototype = {
        result1 : function(){
            console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
        },
        result2 : function(){
            console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
        },
        result3 : function(){
            console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
        }
    }
    
    const info1 = new func("1", "함수", "실행");
    const info2 = new func("2", "자바스크립트", "실행");
    const info3 = new func("3", "제이쿼리", "실행");
    
    info1.result1();
    info2.result2();
}
더보기

해설

 
객체 리터럴 함수이나, 프로토 타입의 객체가 정의 되어 있는 코드입니다. 
여기서 func(num, name, word) 함수는 인수로 세개의 값을 받아들입니다. 
그리고 func.prototype 객체에는 result1(), result2(), result3() 함수가 정의되어 있습니다.
이 함수들은 객체의 속성값들을 이용하여 콘솔에 메시지를 출력합니다.

마지막으로 const 키워드를 이용하여 info1, info2, info3 객체를 생성하고, result1(), result2() 함수를 각 객체에서 호출하고 있습니다.

1.함수가 실행되었습니다.

2.자바스크립트가 실행되었습니다.


05. 결과값을 작성하시오.

{
    function func(num, name, word){
        this.num = num;
        this.name = name;
        this.word = word;
    }

    func.prototype.result = function(){
        console.log(this.num + ". " + this.name + "가 "+ this.word + "되었습니다.");
    }

    const info1 = new func("1", "함수", "실행");
    const info2 = new func("2", "자바스크립트", "실행");
    const info3 = new func("3", "제이쿼리", "실행");

    info1.result();
}
더보기

해설

 
생성자 함수 func()를 정의하고, func.prototype 객체에 result() 메서드를 추가하여 객체가 이를 상속할 수 있도록 만들어주는 예시입니다.

func() 생성자 함수는 3개의 인자(num, name, word)를 받아서 객체의 프로퍼티로 할당합니다. 즉, num, name, word는 객체의 상태를 나타내는 데이터입니다.

func.prototype.result 메서드는 생성자 함수로부터 생성된 객체들이 공유할 수 있는 메서드입니다.

이 함수는 객체의 상태를 나타내는 데이터(num, name, word)를 활용하여 "num. name가 word되었습니다."와 같은 문자열을 출력합니다.

 

위 코드에서 const info1 = new func("1", "함수", "실행");과 같이 객체를 생성하고, info1.result()과 같이 result() 메서드를 호출하여 해당 객체의 상태를 출력할 수 있습니다.

 

1. 함수가 실행되었습니다.


06. 결과값을 작성하시오.

{
    function func(index){
        console.log("함수가 실행되었습니다." + index);
    }
    function callback(num){
        for( let i=1; i<=1; i++){
            num(i);
        }
    }
    callback(func);
}
더보기

해설

  1. callback(func)와 같이 callback 함수에 func 함수를 전달합니다.
  2. callback 함수 내부에서 num 함수를 호출하는 for 반복문을 실행합니다. 이 때, num 함수는 func 함수가 됩니다.
  3. for 반복문은 한 번만 실행되며, i 값이 1인 경우에 num(i)가 실행됩니다.
  4. num(i)가 호출되면서 i 값, 즉 1이 func 함수의 index 매개변수에 전달됩니다.
  5. func 함수는 전달받은 index 값을 활용하여 "함수가 실행되었습니다.1"와 같은 문자열을 출력합니다.
  6. 결과적으로, 콘솔에 "함수가 실행되었습니다.1"이 출력됩니다.

함수 호출 순서는 callback(func) -> callback 함수 내부 for 반복문 실행 -> num(i) 함수 호출 -> func 함수 호출 -> "함수가 실행되었습니다.1"이라는 문자열이 콘솔에 출력됩니다.

함수가 실행되었습니다.1


07.결과값을 작성하시오.

{
    let num = 1;

    do {
        num++;
        console.log("실행되었습니다.");
    } while (num <= 5);

}
더보기

해설

 
do while문에 대한 예제입니다.
do 블록 내 코드를 한 번 실행하고 그 후 while 키워드 다음에 작성한 조건식을 검사하게 됩니다.
조건식이 참일 경우 do의 블록문을 다시 실행하고 false인 경우 반복문이 종료됩니다.
 
그러므로 이 예제에서는 do 블록 내 코드가 6까지 실행되니 실행횟 수는 총 2,3,4,5,6 으로 5번 나오게 됩니다.
 
 
실행되었습니다.
실행되었습니다.
실행되었습니다.
실행되었습니다.
실행되었습니다.

08. 결과값을 작성하시오.

{
    const arr = [100, 200, 300, 400, 500];

    const text1 = arr.join("*");
    const text2 = arr.join("-");
    const text3 = arr.join("");
    const text4 = arr.join(" ");

    console.log(text1);
    console.log(text2);
    console.log(text3);
    console.log(text4);

}
더보기

해설

join()은 배열의 모든 요소를 문자열로 변환하고, 이들을 하나의 문자열로 연결하는 메서드입니다.

text1에는 *, text2에는 -, text3에는 "", text4에는 " " 이므로 출력값은 아래와 같습니다.
 

100*200*300*400*500

100-200-300-400-500

100200300400500

100 200 300 400 500


09. 다음을 최대한 약식으로 짧게 표현하시오.

{
    function func(str){
        return str;
    }
    func("함수가 실행되었습니다.")
}
더보기

해설

선언적 함수 +매개변수 + 리턴값 +괄호 생략 + 중괄호 생략으로 표현할 수 있습니다.

 

func = str => str;


10. 다음의 결과값을 작성하시오.

{
    function func(){
        let i = 10, j = 10, k = 30;
        i /= j;
        j -= i;
        k %= j;

        console.log(i);
        console.log(j);
        console.log(k);
    }
    func();
}
더보기

해설

/=: 나눗셈 후 대입 연산자로, x /= y는 x = x / y와 같은 의미입니다.

-=: 뺄셈 후 대입 연산자로, x -= y는 x = x - y와 같은 의미입니다.

%=: 나머지 연산 후 대입 연산자로, x %= y는 x = x % y와 같은 의미입니다.

 

  1. 변수 i, j, k를 각각 10, 10, 30으로 선언합니다.
  2. i /= j를 수행하여 i의 값을 i(10)와 j(10)의 비율로 나눈 후 i에 대입합니다. 10%10이기 때문에 i의 값은 1이 됩니다.
  3. j -= i를 수행하여 j의 값을 j(10)에서 i(1)를 뺀 후 j에 대입합니다. 이 경우 j의 값은 9가 됩니다.
  4. k %= j를 수행하여 k의 값을 k를 j로 나눈 나머지로 대입합니다. 이 경우 k의 값은 3이 됩니다.

1, 9, 3


11. 다음의 결과값을 작성하시오.

{
    let k = 0;
    let temp;
    for(let i=0; i<=3; i++){
        temp = k;
        k++;
        console.log(temp + "번");
    }
}
더보기

해설

  1. k와 temp 변수를 0으로 초기화합니다.
  2. for문의 조건식이 참인 동안 반복합니다. (i가 0일 때부터 시작)
  3. temp 변수에 현재 k 값을 할당합니다.
  4. k 값을 1 증가시킵니다.
  5. temp 값을 출력합니다.
  6. 조건식을 검사하여, 다음 반복으로 넘어갈지 종료할지를 결정합니다.
  7. for문이 종료됩니다.

0번, 1번, 2번, 3번


12. 다음의 결과값을 작성하시오.

{
    let num = [1, 5, 1, 2, 7, 5];
    for(let i=0; i<6; i++){
        if((i+1) % 2 == 0){
            console.log(num[i]);
        }
    }
}
더보기
해설

num이라는 배열이 선언되었습니다.
i가 0부터 6보다 작을 때까지의 반복문이며 i+1을 2로 나눈 나머지 값이 0 (즉, 짝수일 경우) 배열의 i번째 값을 출력하라는 뜻입니다.
그러므로 num[1] num[3] num[5] 이기 때문에 답은 5 2 5입니다.


5 2 5

13. 결과값을 작성하시오.

{
    let num1 = 3;
    let num2 = 7;
    if(++num1 < 5 || ++num2 > 8){
        console.log(num1);
    }
    console.log(num2)
}
더보기

해설

변수 num1 =3, num2 = 7로 선언되었습니다.

if(++num1 < 5 || ++num2 > 8)에 대입을 해보면

if(4 < 5 || 8 > 8)이 되는데 여기서 ||은 OR을 뜻하므로 이 조건식은 true or false의 값을 가지므로 true가 됩니다.

따라서 출력 후 ++연산을 거쳐 4, 7이 나오게 됩니다.


4, 7


14. 결괏값을 작성하시오.

{
    let num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for(let i=9; i>=0; i--){
        switch(num[i] % 2){
            case 1:
                console.log(num[i]);
                break;
            default:
                console.log("*");
        }
    }
}
더보기

해설

swich문

switch (표현식) {

  case 값1:

    // 값1에 해당하는 동작 수행

    break;

  case 값2:

    // 값2에 해당하는 동작 수행

    break;

  // ...

  default:

    // 모든 case에 해당하지 않을 때 수행할 동작

}

주어진 배열 num에 있는 숫자들을 거꾸로 반복하면서, 각 숫자가 홀수인지 짝수인지를 확인합니다.

switch 문을 사용하여 각 숫자가 홀수인 경우 case 1이 실행됩니다. 이 경우, 해당 숫자를 콘솔에 출력합니다.

반면, 각 숫자가 짝수인 경우 default가 실행됩니다. 이 경우, 콘솔에 "*"이 출력됩니다.

 

9*7*5*3*1


15. 결괏값을 작성하시오.

{
    let cnt = 0;
    let sum = 0;
    for(let i=0; i<=7; i++){
        if(i%2 == 1){
            cnt++;
            sum = sum + i;
        }
    }
    console.log(cnt + ", "+sum);
}
더보기

해설


16. 결괏값을 작성하시오.

{
    let data = [70, 80, 75, 60, 90];
    let best = 1;
    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)
}

17. 결괏값을 작성하시오.

{
    let a, b, result;
    a = 7, b = 4
    result = a & b;

    console.log(result)
}

18. 결괏값을 작성하시오.

{
    function solution(a, b, c){
        let answer="YES", max;
        let tot = a + b + c;

        if(a > b) max = a;
        else max = b;
        if(c > max) max = c;
        if(tot-max <= max) answer = "NO"; 
        
        return answer;
    }
    console.log(solution(13, 33, 17));
}

19. 결괏값을 작성하시오.

{
    function solution(a, b, c){
        let answer;
        if(a < b) answer = a;
        else answer = b;
        if(c < answer) answer = c; 
        return answer;
    }
    console.log(solution(2, 5, 1));
}

20. 결괏값을 작성하시오.

{
    function solution(day, arr){
        let answer = 0;
        for(let x of arr){
            if(x % 10 == day) answer++;
        }
        return answer;
    }
    
    arr = [25, 23, 11, 47, 53, 17, 33];
    console.log(solution(3, arr));
}