관리 메뉴

武裝

VS 6 에서 추가가 된 문법 본문

프로그래머로 레벨업!/자바스크립트

VS 6 에서 추가가 된 문법

zeechive 2024. 4. 22. 12:50

문자열 템플릿 

<script>
    // 템플릿 문자열 
    var name = "홍길동";
    var msg = "안녕하세요";
    var text = name + "님 " + msg;
    console.log(text); 

        // 백팁(`) 을 사용하면, 그 사이 변수를 넣어서 작성할 수 있다.
    var text2 = `${name}님 ${msg}`; 
    console.log(text2); 

</script>

- 백팁 (`) 사이에 특수문자를 넣어서 바꾸고자 하는 영역을 ${  ...  } 사이에 넣어서 편하게 작성 가능. 

 

 

 

 

전개연산 ( spread operator)  : [...배열] > 배열을 모두 나열시킨다. 

<script>
    var arr = [1, 2];
    var arr2 = arr;
    console.log(arr == arr2); // 주소값 공유로 인해서, true 
    var arr3 = [...arr]; 
    console.log(arr3); // [1,2] 가 나온다. 
    console.log(arr == arr3); // 다른 주소값을 갖고 있어서, false
</script>

- arr[0] = 3;  이라고 값을 변경하려고 해도, 리액트는 인지를 하지 못한다. 

 

배열을 모두 합쳐서 나열하는 방식으로 쓸 수도 있다. 

<script>
    var arr4 = [...arr, ...arr2, ...arr3];
    console.log(arr4);
</script>

arr4 = [1, 2, 1, 2, 1, 2]

 

 

 

 

- 객체 전개연산도 할 수 있다. 

<script>
    var obj1 = {a : 1, b : 2}; //객체는 중괄호 
    var obj2 = {c : 3, d : 4};
    var obj3 = {...obj1, ...obj2};
    console.log(obj3);
</script>

  :  속성 명이 중복되면, 뒤 의 값으로 대치가 된다. 

     예> obj2 에 d 가 아닌 b 가 된다면, obj3 는 {a : 1, b : 4, c : 3} 이 된다. 

  : 만약 속성을 바꾸고 싶다면, obj3 중괄호 안에 c: 5 로 넣어야 한다. 별도로 밖에서 재정의 하면 오류가 된다. 

 

 

 

객체 확장 표현식 

<script>
    var propName = "name"; // 변수가 추가되는 것 
    obj3[propName] = "홍길동";
    console.log(obj3);

    var student = {
        stdno = 1;
        propName = '김길동'; // 변수로 인지가 되는 것이 아니라 속성명이 propName 인 것으로 인지 
    }
    var student2 = {
        stdno = 1;
        [propName] = '김길동'; // 속성명을 변수의 값으로 저장 
    }

    var stdno = 1;
    var name = "최길동";
    var age = 10;
    var func = () => {
        console.log('함수');
    }
    var student3 = {stdno, name, age, func} // 배열처럼 보이지만, 중괄호는 속성이다. 
</script>

 - student 3는 속성 명만 존재하는 것이 되는 것. 

 

 

 

 

 

 

구조 분해 할당

- 하나의 배열을 분해해서 각자의 배열에 담는 것 

    var arr = [1, 2];
    var a = arr[0];
    var b = arr[1]; 
    var [a, b] = arr; // 배열은 순서대로 

    var obj = {a : 1, b: 2};
    var {a, b} = obj; // 속성명과 변수명을 비교하여 순서대로 대입해준다. 
    console.log(a,b);

- 전개연산의 경우, 괄호가 우측에 작성이 되어있고, 

  구조분해할당은 괄호가 좌측에 작성이 되어 있다고 생각하면 쉽다. 

 

 

 

 

 

 

html에 인입이 되는 경우, 문제들 

import.html

<script src="test1.js"></script> <!-- src 로 호출하게 되는 경우, 전체를 다 불러온다. -->
<script src="test2.js"></script>
<script>
    func1();
</script>
test1.js

function func1() {
    console.log('func1 호출');
}

function func3() {
    console.log('test1의 func3 호출');
}

function temp() {
    console.log('func1에서만 실행')
}
test2.js

function func2() {
    console.log('func2 호출');
}

function func3() {
    console.log('test2의 func3 호출');
}

 

① html에서 사용하지 않을 것까지 불러오게 되는 단점이 있다. temp라는 함수처럼 

② 실행 순서의 문제 : 동일한 제목을 가진 함수가 import 될 수도 있다.

                               : func3 호출 시, 하위에 있는 test 2에 있는 게 콘솔에서 보이게 된다. 

 

 

 

① 해결책 : 내보내고 싶은 게 있는 곳에서 export 사용 

function func1() {
    console.log('func1 호출');
}

function func3() {
    console.log('test1의 func3 호출');
}

function temp() {
    console.log('func1에서만 실행')
}

export {func1};
<script type="module"> 
    import {func1} from './test1.js';
    console.log(func1());
</script>

- script 의 타입을 작성해줘야 하며, export 한 함수를 import { ... } from '주소값' 으로 작성해줘야 한다.

- 여러 개 내보내기도 가능. ( 중괄호로 작성한 것은 객체이기 때문에 )

 

function func2() {
    console.log('func2 호출');
}

function func3() {
    console.log('test2의 func3 호출');
}

export default func3;

  import가 되는 함수를 지정해두고 싶다면, export default 라고 작성할 수 있다. 

  해당 경우, 이 함수만 export  하기 때문에, 다른 곳에서 import 할 때 아무런 이름이나 작성할 수 있다. 

 

  export default 뒤에 익명 함수나, 화살표 함수를 사용할 수 있다. 

  또한, default 를 작성한 후에도 export를 써서, 전부 넘길 수 있다. 

 

 

 

 

AJAX (Asynchronous JavaScript and XML) : 비동기적 자바 스크립트 

- 동기 : 요청이 다시 일어나거나, 새로고침을 클라이언트가 직접 진행해야 그 내용의 변경이 적용이 된다. (웹, 모바일)   

 

- 비동기 : 실시간으로 값이 변경이 되는 곳에서 진행이 되는 방식 (게임, 주식, 쇼핑...) 

              : 필요한 데이터만을 웹서버에 요청해서 받은 후 클라이언트에서 데이터에 대한 처리를 할 수 있다

                 ( 브라우저에서 서버를 요청할 때 불필요한 리소스 낭비를 줄이기 위해 ) 

              : 게시판 내부에서 2page를 눌렀을 때, 전체 창의 새로고침이 아닌 게시판 부분만 새로고침 되는 것

              : 특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 자바스크립트의 특성

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var req = new XMLHttpRequest();
        req.open('get','https://jsonplaceholder.typicode.com/posts');
        req.send();
        console.log(req.response); 
        // 출력이 안 된다. 비동기이기 때문에, 응답이 오기 전 출력이 나오기 때문에
        // 콘솔에 코딩하면 개별로 진행이 되므로 출력이 된다. (동기적)
    </script>
</head>
<body>
    
</body>
</html>

 

 

 출력을 하기 위해서 작성하는 코드 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var req = new XMLHttpRequest();
        req.open('get','https://jsonplaceholder.typicode.com/posts');
        req.send();
        console.log(req.response); 
        // 출력이 안 된다. 비동기이기 때문에, 응답이 오기 전 출력이 나오기 때문에
        // 콘솔에 코딩하면 개별로 진행이 되므로 출력이 된다. (동기적)

        req.onreadystatechange = function() {
            console.log('상태값 변경 : ' + this.readyState);
            console.log('응답코드 : ' + this.status);
        };
    </script>
</head>
<body>
    
</body>
</html>

 

 

 

- setTimeout() : 특정 시간 후에 실행 
- setInterval() : 특정 시간의 간격 마다 실행  ( 두 개 모두 비동기 구현 객체 ) 

<script>
   console.log('시작');
   setTimeout(function() { console.log('setTimeout');  }, 1000); 
   // 1초라는 큰 값이므로, 비동기 실행의 값이 가장 마지막에. 바깥의 실행 값이 관계가 없다. 
   setInterval(function(){ console.log('setInterval'); }, 1000);
   // 1초마다 출력을 계속 반복해서 한다. 
   console.log('종료');
</script>

 

 

해당 이벤트를 진행과 중지하기 위해서 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        window.onload = function(){
            var num; 
            document.querySelector("#start").onclick = () => {
                console.log('시작');
                num = setInterval(function(){ console.log('setInterval'); }, 1000);
            };
            document.querySelector("#end").onclick = () =>{
                console.log('중지');
                clearInterval(num);
            };
        };
    </script>
</head>
<body>
    <input type = "button" value="시작" id = "start">
    <input type = "button" value="종료" id = "end">
</body>
</html>

clearInterval 을 하기 위해서는 변수가 정해져야 하는데, 이는 시작에서 등록한 것을 끝에서도 사용해야 하므로

onload 지역 변수로 꺼내서 선언해줘야 한다. 

 

 

 

 

promise (비동기 구현 객체) 

 

- 서버에서 받아온 데이터를 화면에 표시할 때 사용

- 대기 : 비동기 처리가 아직 완료되지 않은 상태
- 이행 : 비동기 처리가 정상적으로 완료된 상태
- 거부 : 비동기 처리가 실패하거나 오류가 발생한 상태

Promise는 생성 시점에 비동기 처리 로직을 넣는 'executor' 함수를 인자로 받는다. 

'executor' 함수는 'resolve'와 'reject'라는 두 개의 콜백 함수를 인자로 갖는다.

비동기 처리 로직이 성공하면 'resolve'를, 실패하면 'reject'를 호출.

<script>
   function test(func) {
      return new Promise(function (resolve, reject) {
         setTimeout(function(){
             resolve('Promise'); 
         }, 1000);
      })
   }

   test().then(function(data){
      console.log(data);
   });
</script>

 

 

asuync 함수 안에 await 작성 : 비동기를 동기적으로 처리해야 할 때 

<script>
  function test(func) {
     return new Promise(function (resolve, reject) {
        setTimeout(function(){
          resolve('Promise'); 
        }, 1000);
     })
  }

  test().then(function(data){
     console.log(data);
  });
 
  async function test2() {
     var result = await test(function(data){
         return data;
     })
     console.log('result : ' + result);
  }
  test2();
</script>

 

 

 

 

 

 

fetch 함수를 사용

- 네트워크 요청을 쉽게 만들 수 있게 해주는 API 

 - HTTP 요청을 보내는 데 사용되며, 요청의 결과를 Promise 형태로 반환

<script>
   fetch('https://jsonplaceholder.typicode.com/posts')
      .then( res => res ) // 콜백 함수 (리턴 값이, 다음의 then에 들어간다.)
      .then( data => console.log(data) );
</script>
fetch('<https://api.example.com/items>')
  .then(response => response.json()) // 응답을 JSON 형태로 파싱
  .then(data => console.log(data)) // 파싱된 데이터를 출력
  .catch(error => console.error('Error:', error)); // 오류 처리

 https://api.example.com/items URL로 GET 요청을 보내고, 

응답을 JSON으로 파싱한 후, 

파싱된 데이터를 콘솔에 출력.

만약 요청이나 응답 파싱 과정에서 오류가 발생하면, catch() 메소드를 통해 오류를 처리.

 

 

 

 

'프로그래머로 레벨업! > 자바스크립트' 카테고리의 다른 글

문서 객체 모델(DOM)  (0) 2024.04.22
객체 알아보기  (0) 2024.04.19
이벤트와 이벤트 처리기  (1) 2024.04.19
함수  (0) 2024.04.18
자바스크립트 기본 문법  (1) 2024.04.18