javascript 기초문법

강의노트

 아래주소의 github에 업로드된 예제코드를 다운받아 실습 할 수 있습니다.
 환경설정에 관한 정보는 여기를 참조해주세요.

https://github.com/iseohyun/html-example.git

 레포지토리에서 C_Javascript폴더를 참고해주십시오.


  1. 선언: <script>...</script>에 코딩합니다.
    또는 <script src="script.js"> </script>로 로딩 합니다.
    또는 이벤트 속성에 속성값으로(onclick="javascript") 입력합니다.
    type속성을 <script type="text/javascript">...</script>으로 사용합니다. type속성이 지정되어 있지 않으면 javascript로 간주합니다.
  2. 수행: 위에서 부터 수행합니다.
    • 아직 로딩되지 않은 객체를 불러온다던가, 준비되지 않은 작업을 수행할 수 없습니다.
    • 실행중에 에러가 발생하면, 다음 줄을 수행하지 않고, 중단합니다.
    • function은 수행하지 않습니다. 호출되었을 때, 수행합니다.
  3. 입력: 모든 라인은 세미콜론(;)으로 마무리되어야 합니다.
  4. 주석: // (한줄 주석), 또는 /* */ (여러줄 주석)을 사용할 수 있습니다.
A_Start > a_start.html

환경설정

환경1 : 브라우저

로그 출력

console.log("안녕하세요.");
console.log("안녕하세요.", "반가워요!");

예제는 버튼을 눌렀을 때, 로그를 출력합니다. F12를 눌러서 로그를 확인합니다.

경고 메시지 출력

alert('경고버튼 입니다.')

예/아니오 입력

if(confirm('확인하셨습니까?')){
  console.log('확인되셨습니다.');
}else{
  console.log('취소합니다.');
}

문장 입력

prompt('이름을 입력하세요:')

환경2 : Node.js

 Node.js는 javascript runtime환경을 구축하고, 서버를 개설해주는 어플리케이션입니다. 아래 링크에서 다운로드 받습니다.

https://nodejs.org/en/download

 Extension(ctrl + shift + x)에서 vscode와 Node.js를 연결해 줄 code runner를 설치합니다.

 (option)단축키 설정(Command Palette(ctrl + shift + p)에서 "keyboard shortcuts"검색)에서 "code runner.run"항목의 단축키를 F5로 교체합니다.

A_Start > a2_notejs.js

 실습파일(.js)에서 우상단 Run Code(F5) 실행

기초문법

변수

변수의 선언

variable declaration keywords A_Start > b_variable_declare.html
타입 이름 재선언 변경 사용처
var variable(변수) default, var 생략 가능
let X 이전에 선언되는 것을 방지(=> 변수의 이전 사용 실수 방지)
const constant(상수) X X 변경 금지 상수(초기화 강제=> 금지된 변경, 잘못된 접근 방지)

 ※ 모든 변수는 초기화이전에 'undefined'라는 상태를 갖습니다.
 ※ hoisting: 변수의 선언이 스코프scope의 최상단에 끌어올려지는 현상(초기화X)

 // 아직 선언되지 않았다. hoisting.
console.log(what, typeof what); // 출력: undefined 'undefined'

var what = '20'; // 선언
console.log(what, typeof what); // 출력: 20 string

what = null; // null 입력
console.log(what, typeof what); // 출력: null 'object'
    
A_Start > b2_hoisting.js

변수의 타입

variable type
변수 분류 변수 종류 비고
원시타입
primitive
숫자number 1, 2, 3.1, -10 .. A_Start > b3_number_and_string.js
문자열string "1", "hello", "안녕", .. 1과 "1"은 다릅니다. (1 + 1 = 2, "1" + "1" = "11")
"내용"(큰따옴표)나, '내용'(작은따옴표)으로 감싸서 표시합니다.
특수문자(escape character): (\, 역슬레쉬)를 붙여 표현합니다. (예: \')
template literal : 특수문자를 escape없이 사용 가능합니다.(예:`${변수}입니다.` = 변수 + "입니다.")
참/거짓booolean true, false A_Start > b4_true_false.js false == 0 == '0' == ''(공란) != undefined
true == 1 == '1'!= '문자열' (단, if('문자열') == true)
※ 변수명을 isFlag, hasData등으로 주로 작성
정의되지 않음undefined undifine, null 초기화 이후 할당되지 않은 경우
null: 사용자가 강제로 초기화한 경우(권장)
심볼Symbol Symbol 예: const symbol1 = Symbol('1')
참조타입
reference
배열array 배열명[?, ?, ...] A_Start > b5_array.js 동일한 변수*를 index(순번, 정수)에 맞춰 여러개 가지고 있는 객체
* 변수는 숫자, 문자, 배열, 객체, 함수 모든 것을 포함합니다.(이하동문)
객체object 객체명 = {키:값}
객체명.키 = 값
객체명['키'] = 값
A_Start > b6_object.js A_Start > b7_class_keyword.js 최소 0개 이상의 key:value쌍으로 이루어진 객체
key: 임의 문자열
value: 임의 변수*
함수function function 함수명() {바디} 최소 0개 이상의 입력과 출력을 가진 동작단위

 ※ 원시타입과 참조타입의 구분은 "직접 저장하는가" vs" 저장된 주소를 가리키는가" 입니다. 임베디드 개발이 아니라면 크게 의미가 없을 수도 있습니다. 일례로 typeof null은 object로 출력되지만 고치지 않고 있습니다.

 ※ 특수문자(이스케이프 문자:위키) : (\n) 줄바꿈, (\") 큰따옴표, (\')작은 따옴표...

typeof

 변수 타입을 알고 싶을 때, typeof를 사용합니다.

typeof(변수명); 또는
typeof 변수명;

바람직한 이름이란?

_(underbar, 밑줄)을 제외한 특수기호를 사용 할 수 없습니다.
숫자나 _(underbar, 밑줄)로 시작 할 수 없습니다.
예약어(reserved words, 문법을 위해 사용된 단어(var, let, if ...))를 사용할 수 없습니다.
피하십시오(권장): 의미없는 단어, 너무 긴 이름, 너무 흔한 이름(document), 문법 파괴(MYAGE)

연산자

연산자operator
연산자 이름 예시 해석
= 할당 x = y x에 y값을 저장한다.
== 비교 x == y x와 y는 같은가?
=== 비교 x === y x와 y는 값도 같고 type도 같은가? A_Start > c_equal.js
+ 더하기 x + y x와 y를 더한다.
- 빼기 x - y x에서 y를 뺀다.
* 곱하기 x * y x와 y를 곱한다.
/ 나누기 x / y x에서 y를 나눈다.
% 나머지 x % y x에서 y를 나누고 남은 나머지 값
** 거듭제곱 x ** y x의 y승
<< bit 왼쪽 쉬프트 x << y x의 bit를 y번 왼쪽(←)으로 민다.
>> bit 오른쪽 쉬프트 x >> y x의 bit를 y번 오른쪽(→)으로 민다.
>>> bit 오른쪽 쉬프트(부호x) x >>> y 숫자에서 가장왼쪽 비트는 부호로 사용한다. 왼쪽비트를 부호와 관계없이 무조건 0으로 채운다.
& bit AND연산 x & y x와 y의 각 bit에 대하여 AND연산
| bit OR 연산 x | y x와 y의 각 bit에 대하여 OR연산
^ bit XOR 연산 x | y x와 y의 각 bit에 대하여 XOR연산
& 논리 AND연산 x && y x와 y를 true/false로 간주하고 AND연산
|| bit OR 연산 x || y x와 y를 true/false로 간주하고 OR연산
?? null 병합 연산 x ?? y x가 null이라면 y를 사용합니다. A_Start > c2_null.js

 Bit와 관련하여 2진법 문서를 참고하십시오.

진리표truth table
상황 연산자
A B And Or XOR
true true true true false
true false false true true
false true false true true
false false false false false
단축평가short circuit evaluation A_Start > c3_short_circuit.js
연산자 특징 상황
좌측 우측
And 하나라도
false라면
false
true 좌측이 이미 true라면 결과는 우측값에 따라 결정됨 whatever
false 본인이 이미 false라면 결과는 우측값에 상관없이 본인이 됨 whatever
Or 하나라도
true라면
true
true 본인이 이미 true라면 결과는 우측값에 상관없이 본인이 됨 whatever
false 본인이 이미 false라면 결과는 우측값에 따라 결정됨 whatever

제어문

조건문
A_Start > d1_if.js
반복문
A_Start > d2_for.js
강제이동
A_Start > d3_break_continue.js
if(제어조건){
   …
}
while(반복조건) {
   …
}
{
   break;
}
if(제어조건){
   …
}else{
   …
}
do {
   …
} while(반복조건);
{
   continue;
}
if(제어조건1){
   …
}else if(제어조건2){
   …
}else if(제어조건3){
   …
}else if(제어조건4){
   …
}else if(제어조건5){
   …
}
for(초기값;반복조건;증감) {
   …
}
goto 레이블명;
   …
   …
   …
레이블 :
   …

응용[배열]

반복문

for문 사용
for (var i = 0; i < myArray.length; i++) {
  console.log(myArray[i]);
}
foreach 사용
myArray.forEach(function (element) {
  console.log(element);
});
A_Start > d4_array.js

다중배열

선언
var myArray = [[배열1], [배열2]];
사용
myArray[배열#][순번#] = 값;
A_Start > d5_multiArray.js

복사

var newArray = oldArray;
var newArray = [...oldArray]; // 전개연산자 spread operators
A_Start > d6_array_spread.js

함수

함수와 관련된 용어
용어 한국어 의미
function 함수 입력과 출력을 갖는 논리 구조
method 메서드method: 객체가 가진 함수
argument (전달)인자 아규먼트argument: 함수에게 전달하는 정보
args(argument string) = 문자열
argc(argument count) = 정보의 갯수
parameter param(파라메터): argument를 전달받는 함수 입장에서 부를 때
retrun 반환 리턴return: 함수의 출력
body 내용 함수내용, 코드블록
declaration 선언 등록하는 과정, 선언 문구
prototype(시제품): body가 빠진 선언
definition 정의 코드블록이 포함된 문구
※ go to definition: 함수로 이동
call 호출 함수 수행

문법(syntax)

함수를 선언 할 때
function 함수이름([전달인자]) {
  내용;
  return [리턴 변수];
}
함수를 호출 할 때
[리턴 받을 변수] = 함수이름([전달인자]);
예시
function max(a, b) {
  if (a > b)
    return a;
  else
    return b;
}

 함수는 기능을 하나로 묶어서 호출이 되었을 때, 기술된 내용을 수행합니다.

A_Start > e_function.html

함수객체

 함수란 하나의 코드 덩어리이고, 어딘가에 저장되어 있을 것 입니다. '어딘가'를 변수로 갖고, 동작방식만 함수와 같이 수행한다면 함수도 변수와 같이 취급할 수 있게 됩니다.

 함수를 변수처럼 저장하고 사용할 수 도 있습니다. 아래 예시에서, myfunc은 이미 선언된 함수입니다. myVarFunc에서 myfunc를 마치 변수처럼 저장하였습니다. 마지막으로 myVarFunc()을 함수처럼 호출하면서 사용할 수 있습니다.

사용 예
function myfunc(argu) { ... };
var myVarFunc = myfunc;
myVarFunc(argu);
A_Start > e2_functionObj.js

즉시 실행

 다음과 같이 선언하면, 선언과 동시에 실행이 됩니다.

A_Start > e3_immediately.js
(function func1(arg1) {
  console.log(arg1);
})("즉시 실행");
    

익명함수

 함수의 가장 큰 목적은 재사용성에 있습니다. 이 때, 호출을 위해서 함수이름이 필요합니다. 만약 한번만 쓰이는 함수라면, 굳이 함수의 이름을 작성하지 않아도 됩니다. 호출 방식은 다음과 같습니다.

익명함수 선언방법
(arg1, arg2, ...) => { ... }
익명함수 예시
var myfunc = (e) => { console.log(e); };
A_Start > e4_anonymousefunc.js A_Start > e5_anony_example.js

가변인자

 입력 인자의 갯수가 고정되어있지 않을 때(예:log함수) 다음과 같이 설졍할 수 있습니다.

A_Start > e6_variable_args.js
function func1(...arguments) {
  arguments.forEach((arg) => console.log(arg));
}

기본제공 함수

 Javascript가 기본적으로 제공하는 메소드(method, =function함수)를 이용한 예제

기본 method
예제 함수명 분류 사용예 설명
f01 범용 toString what.toString() what을 문자열 형식으로 저장하시오
typeof typeof(what) what의 타입을 반환하시오
숫자 toFixed num1.toFixed(2) num1을 소수2째로 반올림 하시오
number number(string1) string1을 숫자 형식으로 저장하시오
f02 문자열 [#] string1[3] string1의 문자열에서 4번째 글자를 반환하시오(0 base).
length string1.length string1문자열의 글자갯수를 반환하시오
indexOf string1.indexOf('abcd') string1에서 abcd문자열을 찾으시오
slice string1(3, 6) string1에서 4번째 글자부터 7번째 글자까지 반환하시오
toUppercase
toLowercase
string1.toUppercase() string1에 속한 영문자를 대문자로 출력하시오
replace string1.replace('abcd', 'defg') string1에 있는 abcd를 찾아서, defg로 변경하시오.
f03 배열 toString 문자열로 결합, 구분자(,) 문자열
join 문자열로 결합, 구분자 지정 문자열
split 구분자로 분리 배열
f04 push 원소 추가하기(뒤) 늘어난 길이
pop 원소 제거하기(뒤) 제거된 원소
unshift 원소 추가하기(앞) 늘어난 길이
shift 원서 제거하기(앞) 제거된 원소
f05 sort 정렬(오름차순, 순정렬) 배열(본인도 반영)
reverce 역정렬(내림차순) 배열(본인도 반영)
f06 filter 조회 배열(조회내용)
f07 find 조회(1회) 조회된 첫 값
f08 reduce 순차적 합치기 결과값