kaki1013

1. 자바스크립트 시작 본문

버그바운티 스터디/JAVASCRIPT

1. 자바스크립트 시작

kaki1013 2023. 7. 8. 15:27

# 자바스크립트 기초
1. 자바스크립트(JavaScript)란?

자바스크립트(JavaScript) = 객체(object) 기반의 스크립트 언어 (주로 웹 브라우저에서 사용)
→ HTML = 웹의 내용을 작성, CSS = 웹을 디자인, 자바스크립트 = 웹의 동작을 구현

→ Node.js와 같은 프레임워크를 사용하면 서버 측 프로그래밍에서도 사용가능
→ 현재 컴퓨터나 스마트폰 등에 포함된 대부분의 웹 브라우저에는 자바스크립트 인터프리터가 내장


2. 자바스크립트의 역사
1995년에 넷스케이프(Netscape)의 브렌던 아이크(Brendan Eich)에 의해 만들어짐
이름: 처음에는 모카(Mocha)라는 이름으로 개발 → 라이브스크립트(LiveScript) → 자바스크립트(JavaScript)

3. 자바스크립트의 특징
자바스크립트의 언어적 특징

  • 객체 기반의 스크립트 언어
  • 동적이며, 타입을 명시할 필요가 없는 인터프리터 언어
  • 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현 가능

참고 :
C언어와 같은 언어

: 소스 파일을 작성한 후, 해당 파일을 컴파일(compile)하여 사용자가 실행할 수 있는 실행 파일(.exe)로 만들어 사용
인터프리터 언어

: 이러한 컴파일 작업을 거치지 않고, 소스 코드를 바로 실행할 수 있는 언어
→ 자바스크립트는 웹 브라우저에 포함된 자바스크립트 인터프리터가 소스 코드를 직접 해석하여 바로 실행

4. 자바와 자바스크립트
자바와 자바스크립트 : 그 이름만 놓고 보면 서로 관련이 있는 언어로 생각되기 쉬움
But 두 언어는 서로 직접적인 관련은 없으며, 비슷한 점보다는 다른 점이 훨씬 많음
→ 문법상 비슷한 부분은 두 언어의 문법이 모두 C언어를 기반으로 만들어졌기 때문

자바 자바스크립트
컴파일 언어 인터프리터 언어
타입 검사를 엄격하게 함. 타입을 명시하지 않음.
클래스(class) 기반의 객체 지향 언어 프로토타입(prototype) 기반의 객체 지향 언어

 

5. 자바스크립트 표준
1996년에 넷스케이프(Netscape)

: 자바스크립트를 국제 표준안으로 만들기 위해 ECMA(European Computer Manufacturers Association)에 제출

→ ECMA는 ECMAScript라는 새로운 표준을 제정 & 그 첫 번째 버전인 ECMA-262를 1997년에 공표
→ ECMAScript는 자바스크립트뿐만 아니라 마이크로소프트의 JScript나 어도비의 액션스크립트도 따르는 국제 표준이 됨
→ 현재 자바스크립트의 최신 표준 = 2015년에 발표된 ECMAScript 6

 

# 자바스크립트 소개
자바스크립트를 사용하여 웹 프로그래밍에서 할 수 있는 일
: HTML의 '내용'을 변경 + HTML의 '속성'을 변경 + HTML의 '스타일'을 변경

 

# 자바스크립트 문법
1. 프로그램(program)이란?
프로그램 : 컴퓨터가 실행할 수 있는 명령(instruction)으로 이루어짐
실행문(statement) = 컴퓨터 프로그래밍에서 컴퓨터가 실행할 수 있는 명령들
→ 프로그램 = 특정 결과를 얻기 위해서 컴퓨터에 의해 실행되는 실행문의 집합

2. 자바스크립트 문법
자바스크립트의 실행문 : 세미콜론(;)으로 구분

var x = 10;
var result = x + 3;

 

 

변수나 함수의 이름, 예약어 등을 작성하거나 사용할 때에는 대소문자를 정확히 구분해서 사용

var javascript = 10; // 변수 javascript와 JavaScript는 서로 다른 두 개의 변수로 인식됨.
var JavaScript = 20;
Var Script = 30; // 변수의 선언은 var 키워드로만 할 수 있으면 Var는 동작하지 않음.

 

 

3. 리터럴(literal)
리터럴 : 직접 표현되는 값 그 자체

12            // 숫자 리터럴
"JavaScript"  // 문자열 리터럴
'안녕하세요'  // 문자열 리터럴
true          // 불리언 리터럴

 

 

4. 식별자(identifier)
식별자 : 변수나 함수의 이름을 작성할 때 사용하는 이름
 영문자(대소문자), 숫자, 언더스코어(_) 또는 달러($)만을 사용 가능 in 자바스크립트
→ 숫자로는 시작 불가능 (숫자와 식별자의 구별을 빠르게 하기 위함)
참고: 자바스크립트는 유니코드(unicode) 문자셋을 사용

5. 식별자 작성 방식
(1) Camel Case 방식

 : 식별자를 구성하는 여러 단어들 중 첫 번째 단어는 모두 소문자로 작성 & 그다음 단어부터는 첫 문자만 대문자로 작성
(2) Underscore Case 방식

 : 식별자를 이루는 단어들을 소문자로만 작성하고, 그 단어들은 언더스코어(_)로 연결
 자바스크립트에서는 식별자를 작성할 때 관행적으로 Camel Case 방식을 많이 사용

var firstVar = 10;           // Camel Case 방식
function my_first_func {     // Underscore Case 방식
    var firstLocalVar = 20;  // Camel Case 방식
}

 

참고 ) 자바스크립트에서 하이픈(-)은 뺄셈을 위해 예약된 키워드 → 식별자를 작성할 때는 사용 X

6. 키워드(keyword)
키워드(keyword), 예약어(reserved word)

: 특별한 용도로 사용하기 위해 미리 예약된 단어들
 키워드들은 프로그램 내에서 식별자로 사용 불가능

var firstVar = 10;      // var는 변수의 정의를 위해 예약된 키워드입니다.
function myFirstFunc {  // function은 함수의 정의를 위해 예약된 키워드입니다.
    var secondVar = 20; // var는 변수의 정의를 위해 예약된 키워드입니다.
}

 

 

7. 주석(comment)
주석(comment) : 코드 내에 삽입된 일종의 설명문
→ 작성자나 다른 개발자가 나중에 코드를 수정할 때 참고 가능 / 웹 페이지 개발 시 디버깅에도 사용됨
→ 주석은 자바스크립트 코드의 어느 부분에라도 작성 가능 / 웹 브라우저의 동작에는 전혀 영향 X
 
다음과 같은 두 가지 형식을 지원

// 문법
1. 한 줄 주석 : // 주석문
2. 여러 줄 주석 : /* 주석문 */
var x = 10;
// var y = 20; 한 줄의 주석문 : 이 부분은 실행되지 않을 것입니다.
/*
x = x + y;
여러 줄의 주석문 :
이 부분 또한 실행되지 않을 것입니다.
*/
document.getElementById("text").innerHTML = x;

 

 

→ 자바스크립트에서 여러 줄 주석 안에 또 다른 주석을 삽입하는 예제

(1) 여러 줄 주석 내부에 또 다른 한 줄 주석을 삽입

/* 여러 줄
    // 이렇게 두 줄 주석 안에 또 다른 한 줄 주석을 삽입할 수 있습니다.
주석입니다. */

 

(2) 여러 줄 주석 내부에 또 다른 여러 줄 주석을 삽입 (불가능!)

/* 여러 줄
    /* 또 다른 여러 줄 주석입니다. */
주석입니다. */

 

여러 줄 주석 안에 또 다른 여러 줄 주석을 삽입

    → 삽입한 주석의 종료를 알려주는 기호(*/)를 첫 번째 주석이 자신의 종료를 알려주는 기호(*/)로 인식
    → 위의 예제에서 세 번째 라인은 주석으로 정상 인식 X

    → Uncaught SyntaxError가 발생

    → 실행중이던 스크립트는 중지될 것
 
→ 자바스크립트에서 여러 줄 주석은 절대로 중첩해서 사용 X

# 자바스크립트 출력
1. window.alert() 메소드

: 브라우저와는 별도의 대화 상자를 띄워 사용자에게 데이터를 전달

→ 자바스크립트에서 가장 간단하게 데이터를 출력할 수 있는 방법

<script>
    function alertDialogBox() {
        alert("확인을 누를 때까지 다른 작업을 할 수 없어요!");
    }
</script>

참고 : window 객체의 모든 메소드나 프로퍼티를 사용할 때는 window라는 접두사를 생략 가능

2. HTML DOM 요소를 이용한 innerHTML 프로퍼티

: document 객체의 getElementByID()나 getElementsByTagName() 등의 메소드를 사용하여 HTML 요소를 선택

   & innerHTML 프로퍼티를 이용하면 선택된 HTML 요소의 내용(content)이나 속성(attribute)값 등을 손쉽게 변경

→ 실제 자바스크립트 코드에서 출력을 위해 가장 많이 사용되는 방법

<script>
    var str = document.getElementById("text");
    str.innerHTML = "이 문장으로 바뀌었습니다!";
</script>

 

 

3. document.write() 메소드
: 웹 페이지가 로딩될 때 실행되면, 웹 페이지에 가장 먼저 데이터를 출력
→ 대부분 테스트나 디버깅을 위해 사용

<script>
    document.write(4 * 5);
</script>

 

But 웹 페이지의 모든 내용이 로딩된 후에 document.write() 메소드가 실행

    → 웹 페이지 내에 먼저 로딩된 모든 데이터를 지우고 자신의 데이터를 출력

    → document.write() 메소드를 테스트 이외의 용도로 사용할 때에는 충분히 주의해서 사용해야 함

<button onclick="document.write(4 * 5)">버튼을 눌러보세요!</button>

 

 

4. console.log() 메소드
: 웹 브라우저의 콘솔을 통해 데이터를 출력
→ 대부분의 주요 웹 브라우저에서는 F12를 누른 후, 메뉴에서 콘솔을 클릭하면 콘솔 화면을 사용 가능
→ 이러한 콘솔 화면을 통한 데이터의 출력은 좀 더 자세한 사항까지 출력되므로, 디버깅하는데 많은 도움을 줌

<p>F12를 눌러서 콘솔 화면을 열면 결과를 확인할 수 있습니다.</p>
<script>
    console.log(4 * 5);
</script>

 

 

# 자바스크립트 적용
1. 내부 자바스크립트 코드로 적용
자바스크립트 코드는 <script>태그를 사용하여 HTML 문서 안에 삽입 가능
→ 이렇게 삽입된 자바스크립트 코드는 HTML 문서의 <head>태그나 <body>태그, 또는 양쪽 모두에 위치 가능

문법
<script>
    document.getElementById("text").innerHTML = "여러분을 환영합니다!";
</script>

 

<head>
    <meta charset="UTF-8">
    <title>JavaScript Apply</title>
    <script>
        function printDate() {
            document.getElementById("date").innerHTML = Date();
        }
    </script>
</head>

 

 

2. 외부 자바스크립트 파일로 적용
자바스크립트 코드는 HTML 문서의 내부뿐만 아니라 외부 파일로 생성하여 삽입 가능

외부에 작성된 자바스크립트 파일은 .js 확장자를 사용하여 저장
→ 해당 자바스크립트 파일을 적용하고 싶은 모든 웹 페이지에 <script>태그를 사용해 외부 자바스크립트 파일을 포함

// example.js
function printDate() {
    document.getElementById("date").innerHTML = Date();
}
<head>
    <meta charset="UTF-8">
    <title>JavaScript Apply</title>
    <script>
        function printDate() {
            document.getElementById("date").innerHTML = Date();
        }
    </script>
</head>

 

외부 자바스크립트 파일을 사용

→ 웹의 내용을 담당하는 HTML 코드로부터 웹의 동작을 구현하는 자바스크립트 코드를 분리
→ HTML 코드와 자바스크립트 코드를 각각 읽기도 편해짐 & 유지 보수도 쉬워짐
→ 외부 자바스크립트 파일은 웹 브라우저가 미리 읽어 올 수 있어 웹 페이지의 로딩 속도 또한 빨라짐

'버그바운티 스터디 > JAVASCRIPT' 카테고리의 다른 글

6. 함수  (0) 2023.07.18
5. 배열  (0) 2023.07.11
4. 제어문  (0) 2023.07.11
3. 연산자  (1) 2023.07.11
2. 타입  (0) 2023.07.08