본문 바로가기
front-end/JavaScript

자바스크립트(JavaScriptp)기본 문법

by 모두의 향연 2022. 3. 19.
728x90
반응형
선언
  • <script> 태그를 사용
  • <script> 태그는 HTML 파일 내부의 <head>나 <body> 안 어느 곳에서 선언 가능
  • 하지만 <body> 안의 끝부분에 선언한 것을 권장함
  • ‘src’와 ‘‘type’ 속성을 사용하여 JavaScript를 선언
  • src 속성은 외부의 JavaScript 파일을 HTML 문서에 포함할 때 사용하며, 생략 가능
  • type 속성은 미디어 타입을 지정할 때 사용. JavaScript 코드는 ‘text/javascript’로 지정
1
2
3
4
5
<head>
    <meta charset="UTF-8">
    <title>JavaScript 선언</title>
    <script src="hello.js" type="text/javascript"></script>
</head>
cs

 

주석(comment)
  • 한 줄 주석(Line Comment)과 블록 주석(Block Comment)이 있다(가능하면 한 줄 주석으로 사용)
  • 한 줄 주석은 //code로 표기하고, 블록 주석은 /* code */로 표기

 

변수(variable) 
  • 타입을 명시하지 않고 var keyword를 사용하여 선언(java와 다른 점)
  • 변수의 타입 지정 없이 값이 할당되는 과정에서 자동으로 변 수의 타입이 결정 >> 같은 변수에 여러 타입의 값을 할당 가능(java와 다른 점)

 

자료형(data type)
  • 원시 타입(primitive type)과 객체 타입(object type)으로 분류
  • 원시 타입에는 숫자, 문자열, boolean, null, undefined와 같이 5가지 / 이를 제외한 모든 값은 객체 타입
자료형 typeof 설명
숫자형 number 정수 또는 실수형
문자열형 string 문자, single or double quotation으로 표기
boolean형 boolean 참(true) or 거짓(false)
undefined undefined 변수가 선언 되었지만 초기화가 되지 않을 경우
null object 값이 존재하지 않을 경우

 

숫자형
  • 모든 숫자를 8byte의 실수 형태로 처리 >> 실수로 처리 (정수만을 표현하기 위한 데이터 타입은 없다)
  • JavaScript는 언더플로우, 오버플로우, 0으로 나누는 연산에 대해 예외를 발생시키지 않는다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
 
        // 언더플로우
        console.log(0 / 100);        // 0
        console.log(-0 / 100);        // -0
 
        // 오버플로우
        console.log(100 / 0);        // Infinity
        console.log(-100 / 0);        // -Infinity
        console.log(Infinity / 0);    // Infinity
        console.log(-Infinity / 0);    // -Infinity
 
        console.log(0 / 0);              // Nan
        console.log(parseInt('3A'));     // 1
        console.log(parseInt('A'));      // NaN
 
        console.log(new Number('1'));    // 1
        console.log(new Number('1A'));    // NaN
 
    </script>
</head>
cs

 

문자형
  • 문자 하나를 표현하는 char와 같은 문자형은 제공하지 않는다. ‘a’와 같은 한 글자도 문자열로 표현
  • 작은따옴표(‘, single quotes) 또는 큰 따옴표(“, double quotes) 둘 다 사용 가능(혼용 불가)
  • 요즘엔 백 틱(`)을 이용하여 표현한다(HTML에서 속성 값과 헷갈림 방지)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
 
        console.log("큰따옴표 문자열");                        // 큰따옴표 문자열
        console.log('작은따옴표 문자열');                     // 작은따옴표 문자열
        console.log("3.14");                                 // 3.14
        console.log('문자열 안에 포함된 \'작은따옴표\' 표현'); // 문자열 안에 포함된 '작은따옴표' 표현
        console.log("특수문자 사용\n줄바꿈 했다.");            // 특수문자 사용
                                                            // 줄바꿈 했다.
    </script>
</head>
cs

 

boolean, null과 undefined
  • 비어 있는 문자열, null, undefined, 숫자 0은 false로 간주된다
  • null은 값이 없거나 비어 있음을 뜻하고, undefined는 값이 초기화되지 않았음(정의되지 않음)을 의미
  • null과 undefined는 의미가 비슷하지만 값을 할당하지 않은 변수는 undefined가 할당되고(시스템 레벨), 코드에 서 명시적으로 값이 없음을 나타낼 때(프로그램 레벨)는 null을 사용

 

자동 형 변환

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
 
        var msg = 40;
 
        console.log("message : " + msg);        // message 40(문자열을 만나 40이 문자열이 됨)
        msg = "hello javascript";
        console.log(msg);                        // hello javascript
 
        console.log("The message is " + 40);    // The message is 40
        console.log(40 + " is The message");    // 40 is The message
 
        console.log("40" - 5);                    // 35(빼기는 앞뒤로 숫자만 가능해서 숫자로 인식됨)
        console.log("40" + 5);                    // 405(+는 append의 의미도 갖고 있어서 자동형변환 안됨)
 
        console.log(parseInt("123.45"+ 1);    // 124
        console.log(parseFloat("123.45"+ 1);    // 124.45
 
        console.log("1.1" + "1.1");                // 1.11.1
        console.log((+"1.1"+ (+"1.1"));        // 2.2(숫자 앞에 오는 기호는 주로 부호라서 숫자로 인식)
 
    </script>
</head>
cs

 

 

변수 호이스팅(Variable Hoisting)
  • 추가 작성할 것임

 

상수(constant)
  • 상수의 표기법은 모든 문자를 대문자를 사용하고 단어 사이는 ‘_’로 표기

 

let과 const
키워드 구분 선언위치 재선언
var 변수 전역 가능
let 변수 해당범위 불가능
const 상수 해당범위 불가능

 

연산자 delete
  • 프로퍼티 제거
  • 자바에서는 클래스 안에 변수를 추가할 수 없는데, 자바스크립트에서는 실행 시에 변수 추가가 가능하다. 추가가 되면 삭제도 되는데 그게 delete

 

연산자 ==와 ===
  • ==: 값의 일치 확인
  • ===: 값과 타입까지 일치하는지 확인
1
2
3
4
5
var num = 10;
var str = "10";
 
        console.log('num == str : ' + (num == str));        // true
        console.log('num === str : ' + (num === str));      // false
cs

 

 

객체
  • 객체는 이름과 값으로 구성된 프로퍼티의 집합
  • 문자열, 숫자, boolean, null, undefined를 제외한 모든 값은 객체
  • 객체는 키(Key)와 값(Value)으로 구성
  • 객체는 프로퍼티를 동적으로 추가하거나 삭제 가능
  • JavaScript의 함수는 일급 객체이므로 값으로 사용할 수 있다. 따라서 프로퍼티의 으로 함수를 사용 가능(자스에서 함수는 자바의 메서드라고 생각하면 되는데, 자바에서는 메서드를 객체라고 하지도 않지만 자스에서는 메서드를 객체라고 한다)
  • 객체 생성(객체 리터럴/object생성자 함수/생성자 함수)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<head>
  <meta charset="UTF-8" />
  <title>Insert title here</title>
  <script type="text/javascript">
    var obj = {}; // empty obejct
    console.log(typeof obj);
 
    var student = { //객체리터럴
      name'김길동',
      area: '서울',
      classNum: 7,
      info: function () {
        console.log(this.name + '은 ' + this.area + this.classNum + '반');
      },
    };
    console.log(typeof student); // object
    console.log(student); // {name: "김길동", area: "서울", classNum: 7, info: f}
    student.info(); // 김길동은 서울7반
  </script>
</head>
cs
  • 객체는 dot(.)을 사용하거나 대괄호([])를 사용해서 속성 값에 접근(대괄호 내에 들어가는 변수 이름은 반드시 문자열이어야 한다)
  • 속성 값 변경, 추가, 제거
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE html>
<html>
 
<head>
  <meta charset="UTF-8" />
  <title>Insert title here</title>
  <script type="text/javascript">
    // 객체 리터럴
    var empty_object = {};
    var member = {
      'user-name''홍길동',
      age: 20,
      city: '서울',
    };
 
    // 속성의 값 변경
    member.age = 30;
    member['city'= '경기도';
 
    console.log(member['age']); // 30
    console.log(member.city); // 경기도
 
    // 속성 추가
    member.tel = '010-1234-5678';
    console.log(member.tel); //010-1234-5678
 
    delete member.tel;
    console.log(member.tel); //undefined
 
    var x = member;
    x.city = '제주도';
    console.log(member.city); //제주도
  </script>
</head>
 
<body></body>
 
</html>
cs

여기서 member.tel을 삭제했는데도 undefined가 나오는 이유: console.log로 다시 member.tel을 호출하면서 호이스팅이 일어났기 때문 -> 변수가 선언되었지만 초기화가 되지 않았기에 undefined

 

 

함수(function)
  • JavaScript에서 함수는 일급(first-class) 객체
  • 함수를 변수, 객체, 배열 등에 저장할 수 있고 다른 함수에 전달하는 전달 인자(콜백 함수) 또는 리턴 값으로 사용 가능
  • 함수 정의 방법은 함수 선언문, 함수 표현식, Function 생성자(constructor) 함수 세 가지 방식 제공
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        // 함수 선언문(함수이름 써야함)
        function sum1(num) {
            var sum = 0;
            for (var i = 1; i <= num; i++) {
                sum += i;
            }
            console.log(sum);    // 55
        }
        sum1(10);
 
        // 함수 표현식(함수 이름 생략)
        var sum2 = function (num) {
            var sum = 0;
            for (var i = 1; i <= num; i++) {
                sum += i;
            }
            console.log(sum);    // 55
        }
        sum2(10);
cs

 

 

함수 호이스팅
    • 함수 선언문의 경우 함수 선언의 위치와 상관없이 코드 내 어느 곳에서든지 호출이 가능
1
2
3
4
5
var result = plus(5,7);
console.log(result); //12
function plus(num1,num2){
  return num1+num2;
}
cs

 

    • 함수 표현식의 경우 함수 호이스팅이 아니라 변수 호이스팅이 발생(TypeError발생)
1
2
3
4
5
6
var result = plus(5,7);
console.log(result);
 
var plus = function(num1,num2){
  return num1+num2;
};
cs
 
 
매개변수
  • JavaScript에서 함수 정의 시 매개변수에 대한 타입은 명시하지 않는다
  • 함수를 호출할 때 정의된 매개변수와 전달 인자의 개수가 일치하지 않더라도 호출 가능

매개변수는 2개인데 실제 할당된 값이 1개라면? 첫 번째 매개변수에 일단 값이 들어가고 나머지 하나는 undefined(변수는 선언됐지만, 값이 할당되지 않아서 undefined)

 

 

콜백 함수
  • 콜백 함수(Callback function)는 함수를 명시적으로 호출하는 방식이 아니라 특정 이벤트(시스템이 호출)가 발생했을 때 시스템에 의해 호출되는 함수를 말함
  • 일반적으로 콜백 함수는 매개변수를 통해 전달되고 전달받은 함수의 내부에서 어느 특정 시점(이벤트 발생 시점)에 실행됨
  • 콜백 함수는 주로 비동기식 처리 모델에서 사용됨. >> 처리가 종료되면 호출될 함수(콜백 함수)를 미리 매개변수에 전달하고 처리가 종료되면 콜백 함수를 호출

 

Window 객체 사용: alert, confirm, prompt
  • Window 객체는 웹 브라우저에서 작동하는 JavaScript의 최상위 전역객체이다
  • window 객체의 함수를 호출하면 브라우저에서 제공하는 창을 open
alert() 브라우저의 알림창
confirm() 브라우저의 확인/취소 선택창
prompt() 브라우저의 입력 창
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
 
        function openAlert() {
            alert("알림창입니다.");
        }
 
        function openConfirm() {
            if (confirm("확인입니까?")) {
                console.log("확인 눌렀네요.");
            } else {
                console.log("취소 눌렀네요.");
            }
        }
 
        function openPrompt() {
            var txt = prompt("문자열 입력""사용자입력");
            console.log(txt);
        }
 
    </script>
</head>
cs
순서대로 alert / confirm / prompt

 

Window 객체 사용: location-href/reload, history
  • location.href : 할당 된 URL로 페이지 이동, 히스토리가 남아서 뒤로 앞으로 가기 가능, 페이지를 이동하기 때문에 history에 이력이 추가되며 엄밀히 말하면 페이지 새로고침은 아니다.  url주소의 메소드인 get은 되자만, post 데이터는 포함하지 않는다.
  • location.reload() : 현재 페이지를 새로고침, Post 데이터를 포함해 페이지를 새로 고침 한다. reload() 함수는 옵션을 주어 실행할 수 있으며, 1개의 boolean 인자를 옵션 값으로 받습니다. 옵션 값이 설정되지 않은 경우에 기본값인 false로 실행되며, window.location.reload(true) 로 새로고침 시 서버로부터 캐시값이 아닌 다시 전부 새로 불러온다.
    반면, window.location.reload(false) 로 새로고침시, 서버가 아닌 클라이언트PC 에서 캐시값으로 다시 불러온다.
  • history.back() / history.forward() : 브라우저의 뒤로 가기/앞으로 가기 버튼과 같은 동작

 

 새 창 열기: open()
  • window.open(‘페이지 URL’, ‘창이름’, ‘특성’, 히스토리 대체여부);
  • 창이름(string) : open 할 대상(_blank, _self등) 지정 혹은 창의 이름(창이름을 없앨 경우 클릭할때마다 창이 새로 뜬다)
  • 특성(string) : 새로 열릴 창의 너비, 높이 등의 특성 지정.
  • 히스토리 대체여부(Boolean) : 현재 페이지 히스토리에 덮어 쓸지 여부(true/false)

 

 새 창 닫기: close()
  • opener 속성

 

부모 창 컨트롤
  • window 객체의 opener 속성

 

window 객체 프로퍼티
  • window 객체는 웹 브라우저에서는 구동 되는 JavaScript의 전역 객체
  •  
    self 현재 창 자신, window와 같음 statusbar 창의 상태 바
    document document 객체 toolbar 창의 툴 바
    history history 객체 personalbar 창의 퍼스널 바
    location location 객체 scrollbars 창의 스크롤 바
    opener open()으로 열린 창에서 볼 때 자기를 연 창 innerHeight 창 표시 영역의 높이(픽셀) (IE 지원 안함)
    parent 프레임에서 현재프레임의 상위프레임 innerWidth 창 표시 영역의 너비(픽셀) (IE 지원 안함)
    top 현재프레임의 최상위프레임 outerHeight 창 바깥쪽 둘레의 높이 (IE 지원 안함)
    frames 창안의 모든 프레임에 대한 배열 정보 outerWidth 창 바깥쪽 둘레의 너비 (IE 지원 안함)
    locationba location 바 pageXOffset 현재 나타나는 페이지의 X위치 (IE 지원 안함)
    menubar 창 메뉴바 pageYOffset t 현재 나타나는 페이지의 Y위치 (IE 지원 안함)

 

 

window 객체 함수
alert() 경고용 대화상자를 보여줌
confirm() 확인, 취소를 선택할 수 있는 대화상자를 보여줌
prompt() 입력창이 있는 대화 상자를 보여줌
open() 새로운 창을 오픈
scroll() 창을 스크롤 함
find() 창안에 지정된 문자열이 있는지 확인. 있으면 true, 없으면 false (IE지원 안함)
stop() 불러오기를 중지 (IE지원 안함)
print() 화면에 있는 내용을 프린터로 출력
moveBy() 창을 상대적 좌표로 이동. 수평방향과 수직방향의 이동량을 픽셀로 지정
moveTo() 창을 절대적 좌표로 이동. 창의 왼쪽 상단 모서리를 기준으로 픽셀을 지정
resizeBy() 창의 크기를 상대적인 좌표로 재설정
resizeTo() 창의 크기를 절대적인 좌표로 재설정. 창 크기를 픽셀로 지정
scrollBy() 창을 상대적인 좌표로 스크롤. 창의 표시영역의 수평방향과 수직방향에 대해 픽셀로 지정
scrollTo() 창을 절대적인 좌표를 스크롤 창의 왼쪽 상단 모서리를 기준으로 픽셀로 지정
setTimeout() 지정한 밀리초 시간이 흐른 후에 함수 호출(한 번만)
clearTimeout() setTimeout 함수를 정지
setInterval() 지정한 밀리초 주기마다 함수를 반복적으로 호출
clearInterval() setInterval 함수를 정지
eval() 문자열을 JavaScript 코드로 변환하여 실행

 

 

DOM(Document Object Model)
  • HTML 계층 구조의 제일 위에는 document 노드가 있다
  • 그 아래로 HTML 태그나 요소(element)들을 표현하는 노드와 문자열을 표현하는 노드가 있다
  • Document는 HTML 또는 XML 문서를 표현

 

 

문서 객체 만들기
createElement(tagName) element node를 생성
createTextNode(text) text node를 생성
appendChild(node) 객체에 node를 child로 추가

 

객체의 속성 설정
setAttribute(name, value) 객체의 속성을 지정
getAttribute(name) 객체의 속성값을 가져옴

 

 

innerHTML & innerText
innerHTML 문자열을 HTML태그로 삽입
innerText 문자열을 text node로 삽입.

 

 

문서 객체 가져오기
getElementById(id) 태그의 id 속성이 id와 일치하는 element 객체 얻기
getElementsByClassName(classname) 태그의 class 속성이 classname과 일치하는 element 배열 얻기
getElementsByTagName(tagname) 태그이름이 tagname과 일치하는 element 배열 얻기
getElementsByName(name) 태그의 name 속성이 name과 일치하는 element 배열 얻기
querySelector(selector) selector에 일치하는 첫번째 element 객체 얻기
querySelectorAll(selector) selector에 일치하는 모든 element 배열 얻기

 

728x90
반응형