<한줄요약>

JavaScript : 웹 페이지의 동적 요소(추가, 삭제, 사용자 입력)을 처리하기 위하여

 

1. JS란?

 

-  브라우저는 JS를 HTML과 함께 다운로드, 실행

 브라우저의 JS엔진을 이용해 웹상에서 동작하는 프로그래밍 언어

 

 

2. HTML에서 JS 사용하기

 

 HTML에서는 <script type="text/javascript"> 태그로 JS를 선언한다. (최신버전 기준 type 생략 가능)

외부의 JS파일을 src속성으로 import할 수도 있으며, 직접 작성할 수도 있다.

head, body어디에 있어도 상관 없지만, head에 둘 경우 body 출력 전 점검사항이 늘어나 느려질 수 있다.

 

 

3. JS 문법

 

주석 : Java와 동일, //와 /* */

변수 : type이 없다, var로 선언, 값이 할당되는 중 자동으로 type이 결정된다.

 

기본 자료형

자료형 설명
숫자형, number 정수/실수
문자열, string 문자, 문자열
boolean true/false
undefined 초기화되지 않음
null 값이 존재하지 않음

숫자를 정수/실수로 구분하지 않는다

소숫점 연산시 기본적으로 오차가 발생

기본 연산자 : 자바와 같다. + - * / %

-  Infinity : 무한대. 0으로 나누는 행동을 했을때 발생

NaN : 계산 결과가 숫자가 아닐때 발생

 

문자열과 문자를 구분하지 않는다

'' "" 둘다 사용 가능. \를 사용한 특수문자도 지원

 

boolean은 true/false중 하나를 가진다

-  null, undefined, 빈 문자열, 숫자0은 false와 같다

 

undefined : 시스템 레벨에서 할당되지 않은 변수

null : 코드의 결과값이 없음

 

자동 형 변환

자료형이 다른 변수들끼리 연산해도 자동으로 변환되어 적용된다.

string + int : int가 string으로 변환

-  '1'+23 = '123'

 

변수 호이스팅

- 호이스팅 : 모든 선언을 해당 Scope의 처음에 처리하고 본문을 진행한다

var a = 123; 의 경우,

var a가 먼저 선언되고, 진행 중 var a=123;의 위치에 도달했을때 123으로 초기화된다.

그 이전에 참조할경우 undefined로 참조된다.

 

let과 const

상수는 const로 선언 ( ex. const LIST_SIZE=10; )

var는 기본적으로 전역 Scope

let, const는 해당 block을 Scope로 가진다

let, const는 호이스팅시 undefined로 초기화되지 않아 참조할 수 없다

let은 var와 달리 동일 Scope에서 재선언 불가

 

비교연산자

== : value가 동일한지 확인, '1'==1 은 true이다

=== : type까지 동일한지 확인 '1'==='1'은 false이다 (string과 number로 다름)

 

조건문

if(조건식) else if(조건식) else 자바와 같다

switch-case 자바와 같다

 

반복문

while(조건식). 자바와 같다

do/while 최초 1회는 반드시 수행. 자바와 같다

for( ; ; ) 자바와 같다

for(var key in list) 객체의 key에 대한 foreach로 동작.

-  for(var value in list) 객체의 value에 대한 foreach로 동작. ES6 추가문법, iterator 속성 필요

-  array.foreach( function(item) {} ) array의 각 원소에 대해 foreach로 동작. ES6에선 set/map 지원

 

 

4. 객체

 

이름(key)과 값(value)으로 구성된 property들의 집합

기본 자료형을 제외한 나머지 모든 값들은 객체이다.

-  JS에서는 함수 또한 객체로 취급한다

 

객체 생성

 

1. 객체 리터럴

var player = {
	name : "player1",
	level : 50,
	class : "warrior",
	info : function(){
		console.log(name+ "의 레벨은 " +level +"이며 직업은 " + class+ "입니다.");
	},
};

 

직접 {}안에 각 property들을 명시하여 생성

 

2. Object 생성자 함수

var player = new Object();

player.name = "player1";
player.level = 50;
player.class = "warrior";
player.info = function(){
    console.log(name+ "의 레벨은 " +level +"이며 직업은 " + class+ "입니다.");
};

-  Object로 생성 후 property를 할당

 

-  3. 생성자 함수

function Player (name, level, class){
	this.name = name;
    this.level = level;
    this.class = class;
    this.info = function(){
    	console.log(name+ "의 레벨은 " +level +"이며 직업은 " + class+ "입니다.");
    };
}

var player1 = new Player("player1", 50, "warrior");
var player2 = new Player("player2", 30, "mage");

-  생성자 함수를 만든 후 활용. 중복코드 감소

 

객체 속성 조회, 변경, 추가, 제거

 

-  1. 객체.속성명으로 접근

-  2. 객체["속성명"]으로 접근

-  속성명에 특수문자, 공백, 연산자 등이 있다면 2번방법으로 조회

 

-  접근한 속성에 값을 할당하면 속성의 값이 새로운 값으로 변경된다

-  ex. player1.level = 10;

-  ex2. player1["level"]=10;

 

-  값을 할당한 속성이 없다면 신규 property로 추가된다

-  ex. player1.money= 5000;

 

-  delete연산자로 속성 제거 가능

-  ex. delete player1.money;

 

 

5. 함수

 

-  JS에서 함수는 first-class 객체이다

-  함수는 변수, 배열, 객체등에 저장될 수 있고, 인자로도 전달되고, return값으로도 사용 가능하다

 

함수의 선언

 

-  1. 함수 선언문

function 함수명 (arg1, arg2 ...) {
	//내용
}

 

-  2. 함수 표현식

var 함수명 = function (arg1, arg2 ...) {
	//내용
}

 

-  3. 생성자 함수 이용

var 함수명 = new Function ("arg1", "arg2" .... "함수 내용");

 

 

함수 호이스팅

 

-  함수 선언문 : 호이스팅된다. 어디서든 호출 가능

-  함수 표현식 : 호이스팅되는건 var 변수. 초기화되기까진 undefined로 함수로 사용할 수 없다.

 

함수의 인자

 

-  인자의 갯수가 선언과 일치하지 않더라도 호출 가능하다

 

콜백함수

 

-  특정 이벤트 발생에 따라 자동으로 호출되는 함수

-  ex) 버튼 클릭시 특정 JS 함수가 작동하게 한다

-  주로 비동기식 처리를 위해 사용한다

 

 

6. Window 객체

 

-  웹 브라우저의 JS 최상위 객체

-  브라우저의 여러 객체, 속성이 존재한다

 

Window 객체 활용

-  alert() : 내부 문자열을 담아 경고창 호출

-  comfirm() : 내부 문자열을 담아 확인/취소창 호출

-  prompt() : 문자열을 입력할수 있는 창 호출

 

-  navigator는 브라우저의 정보를 담고있다. chrome인지, ie인지, firefox인지 구분 가능

 

-  location.href=url  : url로 이동한다

-  history.back()/forward() : 뒤로가기, 앞으로가기

 

-  window.open('url', 'name', 'attr', history) : 새 창을 연다

-  이 url에, 이 name으로, 이 attr특성으로, history 덮어쓰기 여부 등 조절 가능

 

-  window.close() 닫는다

-  window.opener() 이 창을 연 창, 즉 부모 창을 컨트롤할 수 있게 해준다.

 

 

7. DOM (Document Object Model)

 

-  문서의 요소들을 tree 계층구조로 표현

-  최상위 노드는 window객체의 document 객체가 위치한다.

-  문서 요소의 추가, 수정, 삭제 지원

 

신규 객체 생성하기

 

-  element를 만들고, text를 넣고, document에 넣는다

var h2 = document.createElement("h2");
var msg = document.createTextNode("hello world!");

h2.appendChild(msg);
document.body.appendChild(h2);

 

-  객체에 속성 추가/조회는 get/setAttribute함수로 할 수 있다.

var img = document.createElement("img");
img.setAttribute("src","img.jpg");
img.setAttribute("width", 160);
img.setAttribute("height", 250);

document.body.appendChild(img);

 

-  객체 하위에 HTML 추가는 innerHTML로 가능하다

-  객체 하위에 text 추가는 innerText로 가능하다

var div = document.createElement('div');
var div2 = document.createElement('div');

div.innerHTML = '<h1>hello world!!</h1>';
div.innerText = 'hello world!!';

 

문서에서 객체 찾기

 

-  id로 찾기 : getElementById(id) : element 한개 반환

-  class로 찾기 : getElementsByClassName(className) : element의 배열을 반환

-  tag으로 찾기 : getElementsByTagName(tagName) : 배열반환

-  name으로 찾기 : getElementsByName(name) : 배열반환

-  css의 선택자 사용

-  querySelector(selector) : 선택자에 맞는 element중 첫번째 하나

-  querySelectorAll(selector) : 선택자에 맞는 element 전부

 

문서에서 객체 제거

 

-  removeChild(node);

 

 

8. 이벤트 (Event)

 

-  웹 페이지에서 발생하는 여러 상호작용들을 event라 한다

-  마우스 클릭, 키보드 입력, 드래그 등등

-  일반적으로 이벤트-함수가 연결되고, 이벤트 발생시에 호출한다.

-  이벤트 발생시 호출될 함수, 이벤트 핸들러를 만들어 연결해줘야 한다.

 

이벤트 종류

 

-  마우스

-  onclick : 마우스로 클릭시 발생

-  ondblclick : 더블클릭

-  onmousedown : 마우스 버튼이 눌렸을 때

-  onmouseup : 마우스 버튼이 올라갈 때

-  onmouseover : 커서가 들어올 때

-  onmouseout : 커서가 나갈 때

-  onmousemove : 마우스가 움직일 때

 

-  키보드

-  onkeypress : 키보드가 눌렸을 때

-  onkeydown : 키보드를 누르는 순간

-  onkeyup : 눌린 키가 올라오는 순간

 

-  frame

-  onload : 모든 로딩이 끝났을때

 

-  form

-  onsubmit : 전송될 때

-  onreset : reset될 때

-  onfocus : 입력 포커스가 들어올 때

-  onblur : 포커스가 나갈 때

 

이벤트 핸들러 등록

 

-  1. 인라인 이벤트 핸들러

<div onclick="javascript:alert('hello world!');">클릭
// 2가지 함수 호출
<div onclick="func1(); func2();">클릭

-  클릭시 js가 호출되 hello world! 메시지의 alert 창이 뜬다

 

-  2. 이벤트 핸들러 property

-  JS상에서 DOM을 찾아 선택하고 이벤트 핸들러를 등록한다

<script>
document.getElementById("id").onclick = function () {
	alert("hello world!");
};
</script>

-  하나의 DOM에 2개의 핸들러를 등록할 수 없다.

 

-  3. addEventListener방식

-  이벤트 이름, 핸들러를 전달하면 등록해준다

<script>
document.getElementById("id").addEventListener("click", openAlert, false);

function event(){
	alert("hello world!");
};
</script>

-  하나의 이벤트에 하나 이상의 핸들러 추가 가능

 

 

9. 브라우저 저장소

 

-  사용자 로컬에 데이터를 보관한다.

-  JS로 조작 가능

-  Cookie와의 차이 : 유효기간이 없으며, 가용 용량이 더 크다

-  key - value pair로 저장된다.

 

-  localStorage에 데이터 저장하기

<script>
	function storage(){
    	localStorage.Data = "testData";
    	localStorage["Data"] = "testData";
    	localStorage.setItem("Data", "testData");
    };
</script>

 

-  localStorage의 데이터 획득하기

<script>
	function storage(){
    	var val = localStorage.Data;
    	var val = localStorage["Data"];
    	var val = localStorage.getItem("Data");
    };
</script>

 

-  localStorage의 데이터 삭제하기

<script>
	function storage(){
    	localStorage.removeItem("Data");
        //전체삭제
        localStorage.clear();
    };
</script>

 

'WEB 공부' 카테고리의 다른 글

[WEB] Backend - EL, JSTL  (0) 2021.05.16
[WEB] Backend - Servlet, JSP  (0) 2021.05.16
[JAVA] JDBC  (0) 2021.05.16
[WEB] Frontend - Bootstrap  (0) 2021.05.15
[WEB] Frontend - AJAX  (0) 2021.05.15
[WEB] Frontend - JQuery  (0) 2021.05.09
[WEB] Frontend - HTML, CSS  (0) 2021.05.08

+ Recent posts