강의노트
아래주소의 github에 업로드된 예제코드를 다운받아 실습 할 수 있습니다.
환경설정에 관한 정보는 여기를 참조해주세요.
레포지토리에서 C_Javascript폴더를 참고해주십시오.
-
선언: <script>...</script>에 코딩합니다.
또는 <script src="script.js"> </script>로 로딩 합니다.
또는 이벤트 속성에 속성값으로(onclick="javascript") 입력합니다.
type속성을 <script type="text/javascript">...</script>으로 사용합니다. type속성이 지정되어 있지 않으면 javascript로 간주합니다.
-
수행: 위에서 부터 수행합니다.
- 아직 로딩되지 않은 객체를 불러온다던가, 준비되지 않은 작업을 수행할 수 없습니다.
- 실행중에 에러가 발생하면, 다음 줄을 수행하지 않고, 중단합니다.
- function은 수행하지 않습니다. 호출되었을 때, 수행합니다.
- 입력: 모든 라인은 세미콜론(;)으로 마무리되어야 합니다.
- 주석: // (한줄 주석), 또는 /* */ (여러줄 주석)을 사용할 수 있습니다.
환경설정
환경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/downloadExtension(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) 실행
기초문법
변수
변수의 선언
타입 | 이름 | 재선언 | 변경 | 사용처 |
---|---|---|---|---|
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
변수의 타입
변수 분류 | 변수 종류 | 예 | 비고 |
---|---|---|---|
원시타입 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)
연산자
연산자 | 이름 | 예시 | 해석 |
---|---|---|---|
= | 할당 | 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진법 문서를 참고하십시오.
상황 | 연산자 | |||
---|---|---|---|---|
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 |
연산자 | 특징 | 상황 | |
---|---|---|---|
좌측 | 우측 | ||
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문 사용foreach 사용for (var i = 0; i < myArray.length; i++) { console.log(myArray[i]); }
A_Start > d4_array.jsmyArray.forEach(function (element) { console.log(element); });
다중배열
선언var myArray = [[배열1], [배열2]];사용
myArray[배열#][순번#] = 값;A_Start > d5_multiArray.js
복사
var newArray = oldArray;A_Start > d6_array_spread.js
var newArray = [...oldArray]; // 전개연산자 spread operators
함수
용어 | 한국어 | 의미 |
---|---|---|
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; }
함수는 기능을 하나로 묶어서 호출이 되었을 때, 기술된 내용을 수행합니다.
- 전달인자(Argument)는 여러개이거나 생략될 수 있습니다.
- 전달인자는 넘겨주는 순서가 중요합니다.
- 리턴(retnrun)은 한개 또는 생략만 가능합니다.
- 리턴이 수행되면, 그 행에서 함수가 종료되고, 호출한 함수로 돌아갑니다.
함수객체
함수란 하나의 코드 덩어리이고, 어딘가에 저장되어 있을 것 입니다. '어딘가'를 변수로 갖고, 동작방식만 함수와 같이 수행한다면 함수도 변수와 같이 취급할 수 있게 됩니다.
함수를 변수처럼 저장하고 사용할 수 도 있습니다. 아래 예시에서, myfunc은 이미 선언된 함수입니다. myVarFunc에서 myfunc를 마치 변수처럼 저장하였습니다. 마지막으로 myVarFunc()을 함수처럼 호출하면서 사용할 수 있습니다.
function myfunc(argu) { ... };A_Start > e2_functionObj.js
var myVarFunc = myfunc;
myVarFunc(argu);
즉시 실행
다음과 같이 선언하면, 선언과 동시에 실행이 됩니다.
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.jsfunction func1(...arguments) {
arguments.forEach((arg) => console.log(arg));
}
기본제공 함수
Javascript가 기본적으로 제공하는 메소드(method, =function함수)를 이용한 예제
예제 | 함수명 | 분류 | 사용예 | 설명 |
---|---|---|---|---|
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 | 순차적 합치기 | 결과값 |