Javascript 개요

자바스크립트 기본

  • 출처: https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/Introduction
  • DOM : 문서 객체 모델(The Document Object Model)
  • HTML, XML 문서의 프로그래밍 interface 이다.
  • DOM은 문서의 구조화된 표현(structured representation)을 제공하며 프로그래밍 언어가 DOM 구조에 접근할 수 있는 방법을 제공하여 그들이 문서 구조, 스타일, 내용 등을 변경할 수 있게 돕는다.
  • DOM 은 구조화된 nodes와 property 와 method 를 갖고 있는 objects로 문서를 표현한다.
  • 웹 페이지를 스크립트 또는 프로그래밍 언어들에서 사용될 수 있게 연결시켜주는 역할을 담당한다.

DOM에서의 객체 접근

  • document.getElementById(id)
  • document.getElementsByTagName (en-US)(name)
  • document.createElement(name)
  • parentNode.appendChild (en-US)(node)
  • element.innerHTML (en-US)
  • element.style (en-US).left
  • element.setAttribute (en-US)
  • element.getAttribute
  • element.addEventListener (en-US)
  • window.content (en-US)
  • window.onload (en-US)
  • window.dump (en-US)
  • window.scrollTo (en-US)

자바스크립트, Node.js 자습 사이트

  • 노마드코더 : https://www.youtube.com/channel/UCUpJs89fSBXNolQGOYKn0YQ
  • 생활코딩 : https://opentutorials.org/course/3085
  • w3cschool 레퍼런스 : https://www.w3schools.com/jsref/default.asp
  • w3cschool : https://www.w3schools.com/js/default.asp
  • Node js school : https://nodeschool.io/ko/#workshoppers
  • http://tcpschool.com
  • https://www.w3schools.com/
  • 참고할만한 사이트 : https://www.codingfactory.net/

자바스크립트 버전에 관하여

  • 출처 : https://medium.com/sjk5766/ecma-script-es-%EC%A0%95%EB%A6%AC%EC%99%80-%EB%B2%84%EC%A0%84%EB%B3%84-%ED%8A%B9%EC%A7%95-77715f696dcb

ES3 (1999)

  • 우리가 흔히 말하는 자바스크립트.

ES5 (2009)

  • 배열에 forEach, map, filter, reduce, some, every와 같은 메소드 지원
  • Object에 대한 getter / setter 지원
  • 자바스크립트 strict 모드 지원 (더 깐깐한? 문법 검사를 한다.)
  • JSON 지원 ( 과거에는 XML을 사용하다가, json이 뜨면서 지원하게 됨 )

ES 2015 (ES 6)

  • let, const 키워드 추가 : 기존의 변수는 함수 scope를 가진 var 키워드를 이용하여 선언하였다. 때문에 block scope 를 가진 let과 const 키워드를 추가하였다. 기존에는 상수형 키워드가 없어 CONST_TEST와 같이 대문자로 상수임을 표시했다면, ES 6부터 const 키워드가 추가되어 값의 변경을 통제한다.
  • arrow 문법 지원 : arror 문법은 두 가지의 장점을 제공한다. 첫 번째는 익숙하면 편하고 간결해진 코드를 작성할 수 있다. 두 번째는 this 를 바인딩하지 않는다. (다르게 말하면, this는 해당 scope의 this와 같다.)
  • iterator / generator 추가 : 위 arrorw에서 샛길로 빠져서 더 새진 않겠습니다. 이 둘은 따로 공부해서 글을 쓸 정도로 내용이 깊고 많습니다.
  • module import / export 추가 : 사실 저는 익숙하고 당연하게 import / export를 써 왔는데 도입된 시점이 그리 오래되지 않았다는 것에 잠깐 놀라네요.
  • Promise 도입 : 자바스크립트의 비 동기 callback hell을 해결해 줄 기법이 추가 되었습니다.

ECMA 2017 (ES 8)

  • async — await : 위에서 ES6에서 callback hell을 해결하기 위해 Promise가 도입되었다고 했는데 async-await도 Promise처럼 callback 을 해결할 뿐만 아니라 좀 더 직관적이고 단순하게 코드를 만들 수 있습니다

브라우저별 자바스크립트 지원 여부

  • 출처 : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%97%94%EC%A7%84 image

프로그램 언어 순위?

  • TIOBE : https://www.tiobe.com/tiobe-index/
  • TIOBE programming language index는 해당 프로그래밍 언어를 이용하는 엔지니어 및 업체의 수와 Google, Bing, Yahoo 등의 검색 엔진을 통해 검색되는 결과물의 수를 바탕으로 순위를 결정한다. 따라서 TIOBE index에서는 C/C++이나 Java와 같은 전통적인 프로그래밍 언어의 순위가 높게 산정되는 경향이 있다.

Javascript의 작성위치

external

  • 외부에 js 파일을 두고 이를 불러서 사용 <script src="externalScriptFile.js"></script>

embeded

  • script 태그 내에 스크립트를 작성
  <script>
    alert("test");
  </script>

inline

  • html의 onclick등에 직접 작성
<button onclick="alert('버튼 클릭')">버튼<button/>

자바스크립트의 구성요소

이벤트(트리거)

  • DOM Events : https://www.w3schools.com/jsref/dom_obj_event.asp
  <button onclick="alert('클릭됨')">클릭 해 주세요.</button >
  <button onmouseover="alert('마우스 올림')">마우스를 올려주세요.</button >

함수(function, method)

  • 기능
  • 여러가지 명령을 묶어 놓은 것

    함수의 선언

  • 함수를 사용하기 전, 함수의 형태나 내용등을 정의합니다. (사용 하기 위해 미리 설명을 해둡니다)
  • function 함수 이름 (인자1, 인자2 ...) { 내용 }

함수의 호출

  • 함수를 불러서 정해진 대로 작동 하도록 해줍니다.
  • 인자 값을 전달하여 함수가 그때그때 다른 동작을 할 수 있도록 할 수도 있습니다.
  • 함수 이름 (인자1, 인자2 ...);

예제

기본함수

  <script>
  	function f1(){
  		alert("아주 기본적인 형태의 함수 입니다");
  	}
  </script>
  <button onclick="f1()">f1 실행</button>

인자값이 있는 함수

  <script>
  	function f2(i){
  		alert(i+"라는 값을 전달 받았습니다");
  	}
  </script>
  <button onclick="f2(1)">f2 실행하면서 1을 전달</button>
  <button onclick="f2(2)">f2 실행하면서 2을 전달</button>
  • 인자값 (변수 variable) 이 있는 경우는 호출하기에 따라 각각 다른 일을 할 수 있습니다.

리턴이 있는 함수

  • 함수의 처리 결과를 의미하는 리턴(return)이 있는 함수는 스스로 무언가를 하기보다는 처리결과를 되돌려 줍니다.
  <script>
  	function f3(i,j){
  		return i+j;
  	}
  	function f4(i,j){
  		var sum = f3(i,j);
  		alert(i+"더하기"+j+"는?"+sum);
  	}
  </script>
  <button onclick="f4(3,5)"> 3+5는? </button>

변수(variable)

  • 변하는 수
  • 똑같은 기능(function)을 가지고도 다양한 결과가 나올 수 있도록 함

출력장치

  document.getElementById("demo").innerHTML="";
  document.write("");
  window.alert("");
  console.log("");

변수

이름규칙

  • 이름에는 문자(영문),숫자,언더라인(_),달러기호($)이 사용될 수 있다.
  • 이름은 반드시 문자(영문)으로 시작하여야 한다.
  • 이름은 달러기호($)와 언더라인(_)으로 시작할 수도 있다.
  • *라이브러리의 주기능에 대한 별칭으로 ($)가 사용되는 경우가 많음
  • *비공개(숨겨진) 변수에 대한 별칭으로 (_)가 사용되는 경우가 많음
  • 이름은 대소문자를 구분해야 한다. (y와 Y는 서로 다른 변수이름)
  • 예약어(javascript에서 사용하기 위해 미리 지정된 이름)는 변수이름으로 사용될 수 없다.

선언방식

 var carName;
 carName = "sport car"; //hoist라고 부르며 var만 이 방식으로 선언가능
 var carName = "sport car";
 var carName = "sport car", carColor = "red", carPrice = "10000";

var

  • 중복선언 시 값이 유실되지 않음
  <p id="demo"></p>

  <script>
    var carName = "Volvo";
    var carName;
    document.getElementById("demo").innerHTML = carName;
  </script>

let

  • let은 ES6(2015)에 처음 소개되었다.
  • let은 재정의 될 수 없다.
  • let은 사용전 반드시 값이 할당되어야 한다.
  • let은 블록변수(block scope)로 사용될 수 있다

재정의 될 수 없다

  let x = "John Doe";
  let x = 0;
  // SyntaxError: 'x' has already been declared

블록변수(block scope)로 사용 될 수 있다

  • {} 내에서 정의 된 let은 밖에서 접근할 수 없다.
 {
   let x = 2;
 }
 // x can NOT be used here
 console.log(x);
  • 지역변수로 사용할 수 있는 기초
  • var같은 경우는 scope 밖에서 변수가 재정의 되거나 변경될 수 있다.
  • 이미 선언된 let를 var로 재정의 하거나, var를 let으로 재정의 하는것이 불가능

const

  • const는 ES6(2015)에 처음 소개되었다.
  • const는 재정의 되지 않는다.
  • const는 값이 재할당 되지 않는다.
  • const는 블록변수(block scope)를 가지고 있다.
  • Array(배열) Object(객체) Function(함수) RegExp(정규표현식)
  • 변수가 아니기 때문에 고정된 값을 할당합니다.
  • 위와같은 객체형 변수를 할당할 경우 객체참조(주소)를 고정값으로 가지고 있고. 객체 자체에 접근하여 변수를 수정할수 있습니다.

산술연산

  • 사칙연산(+,-,*,/)으로 기본되는 숫자를 이용한 셈 연산

논리연산

  • 예/아니오, 참/거짓 으로 표현될 수 있는 판단
  • !=, ==, <=, >=, <, >

제어문

  • 조건문, 반복문, 분기문

    조건문

  • 조건식을 통하여 비교판단 하고 기능을 제어하는 구문
  • if, if ~ else, if ~ else if ~ else, switch

반복문

  • 같은 작업(또는 약간의 차이가 있는 연속성작업)을 쉽게 처리하기 위한 구문
  • while, do ~ while, for

분기분

  • 실행순서를 변경하여 다른명령을 실행할 수 있도록 하는 구문
  • break, continue, return

자바스크립트의 특수성

DOM(문서 객체 모델 : The Document Object Model) 제어

  <div>나의 이름은 <span id="my_name">홍길동</span>입니다. 반가워요</div>
  <script>
  	var name_span = document.getElementById("my_name");
  	name_span.innerHTML = "고길동";
  </script>

CSS 제어

  <style>
  	.red_back{
  		background-color: red;
  	}
  </style>
  <div id="div_red"> 붉은 배경 </div>
  <script>
  	var target_div = document.getElementById("div_red");
  	target_div.classList.add("red_back");
  </script>

class제어, transition의 조합

  <style>
  	#div_red2{
  		transition: background-color 1s;
  	}
  	.red_back2{
  		background-color: red;
  	}
  </style>
  <div id="div_red2" onmouseover="add_red()" onmouseout="remove_red()"> 붉은 배경 </div>
  <script>
  	var target_div = document.getElementById("div_red2");
  	function add_red(){
  		target_div.classList.add("red_back2");
  	}
  	function remove_red(){
  		target_div.classList.remove("red_back2");	
  	}
  </script>