반응형

# 자바스크립트 학습

# 함수 (function)

  • 특정 기능을 처리하는 자바스크립트 코드의 묶음
  • 함수의 형태
1. 함수의 형태 1
function book() {
	var title = "JS 책";
}

2. 함수의 형태2
var point = function(one, two) {
	var total - one + two;
    var bonus = total + 100;
}

## 함수의 구성 요소

  • function 키워드(KeyWord)
  • 함수 이름
  • 파라미터(Parameter) : 매개 변수, 인자, 아규먼트로도 불린다. 파라미터의 작성은 선택사항이다.
1. 함수의 이름을 사용한 형태1	// 함수 이름 book
function book() {
	var title = "JS 책";
};

2. 함수의 이름을 사용한 형태2	// 함수 이름 point
var point = function(one, two) {		// 소괄호() 안에 작성한 것을 파라미터라고 한다.
	var total = one + two;
    var bonus = total + 100;
};
  • 함수의 Body
중괄호{ } 안에 작성한 코드
함수 코드, 소스 텍스트로도 부른다.
함수의 코드 작성은 선택이다.

## 함수의 이름 규칙

  • 첫 문자의 경우...
영문자, $, 언더바(_) 사용가능
첫문자로 사용 불가능한 것 : 숫자, &, *, @, + 등..
function setBookTitle() {
	var title = "JS 책";
};

var calculatePoint = function(one, two) {
	var total = one + two;
    var bonus = total + 100;
};
  • 함수 이름 작명 권장사항은 아래와 같다.
함수 이름은 내부의 코드를 읽지 않더라도, 함수의 이름과 파라미터를 바탕으로 기능을 알 수 있도록 작명해야 한다. 
시맨틱(의미, 뜻)을 부여하여 작명한다.

## 함수의 이름 관례

  • calculatePoint() 처럼 동사로 시작한다. => calculatePoint는 포인트를 계산한다는 의미.
function setBookTitle() {
	var title = "JS 책";
};

var calculatePoint = function(one, two) {
	var total one + two;
    var bonus = total + 100;
};
  • 카멜 표기법(CamelCase 형태) : 두 개 이상의 단어를 사용할 때, 두 번째 단어부터 명사를 사용하며, 명사의 첫 문자를 대문자로 사용한다. (낙타 등과 비슷하다고 하여 카멜 표기법이라고 함)
  • 동사 + 명사의 형태로 인해 동적인 모습이 된다. (함수는 뭔가를 처리하는 기능을 수행하므로 정적인 모습이면 안된다.)

## 함수의 호출

  • 함수는 호출이 되어야 실행된다.
function setValue(one, two) {
	var total = one + two;
};

setValue(10, 20);	// setValue 라는 함수 호출, 파라미터 값 전달하여 값 받는 것이 목적
  • 함수 호출의 경우 setValue() 형태로 호출, 호출 시 호출 하려는 함수의 이름과 소괄호()의 형태로 작성한다. 만약 소괄호를 작성하지 않을 경우 호출되지 않는다.
  • 파라미터
호출된 함수에 넘겨줄 값을 작성한다.
파라미터의 경우 setValue(10, 20)처럼 소괄호() 안에 작성한다.
파라미터에는 자바스크립트에서 지원하는 타입을 작성해야 한다.
콤마(,)로 구분하여 다수의 값을 작성할 수 있다.
  • 함수의 사이클
1. 함수를 호출
setValue();

2. 함수를 호출하면서 파라미터 값 전달
setValue(10, 20);

3. 파라미터 값 설정 및 함수 코드 실행
function setValue(one, two) {
	var total = one + two;
};
  • 일반적으로 호출 받는 함수를 소스 파일 위에, 호출 하는 함수를 아래에 작성한다. (반드시 이렇게 해야 하는 건 아니다.)

## return

  • return문의 형태
return 표현식opt;
  • return문 실행 시 표현식의 평과 결과를 반환한다. (표현식 작성은 선택이다.)
function getPoint() {
	return 10 * 30;
};

var result = getPoint();
log(result);

=>
300
  • undefined 반환의 경우 예
function getPoint() {
};

var result = getPoint();

log(typeof result);

=>
undefined

return을 작성하지 않으면, 값을 반환하지 않는것이 아니라 undefined 값을 반환한다.
자바스크립트에서 undefined는 값이다.
  • 줄을 분리하여 표현식 작성한 예
function getPoint() {
	return
    10 * 30;
};

var result = getPoint();

log(result);

=>
undefined

return 다음에 세미콜론(;) 이 없고 줄 바꿈 된 경우
자바스크립트가 자동으로 세미콜론을 작성해 준다.
위 코드에서는 이로인해 return에서 문장이 종료되며 아래 10*30 문장은 실행되지 않는다.

# 주석 작성의 목적

  • 주석 작성의 궁극적 목적은 코드가 목적을 달성하기 위한 기능, 시나리오 등을 생각하고 정리하는 것이며, 이처럼 생각하고 정리한 것을 문법에 맞춰 작성하는 것이 코드이다.
  • 코드를 작성하기 전에 먼저 생각을 정리하고, 정리한 생각을 주석으로 작성한다. (주석을 작성하는 습관은 중요하다.)

## 주석 작성의 기준

  • 작성한 코드의 목적과 결과가 미치는 영향을 주석에 작성한다.
  • 다른 사람이 알 수 있도록 자세하게 주석을 작성해야 한다.

## 주석 작성의 사례

  • 문법적으로 정의된 것이 아닌, 개발자 간의 관례로 전해지다가 일반화 되었다.
/**
* @function calculateAmount
* 1. 파라미터로 받은 수량에 단가를 곱해
*    금액을 계산하고 결과 값을 반환한다.
* 2. 수량과 단가의 0 체크는
*    함수를 호출하기 전에 하므로 체크하지 않는다.
* @param {Number} quantity, 수량 
* @param {Number} price, 단가
* @param {Number} 계산 결과
*/
function calculateAmount(quantity, price) {
	// 주석을 자세하게 작성하기 위해
    // 함수의 코드를 분리하는 경우도 있다.
};
반응형
반응형

# 자바스크립트 학습

# switch

  • switch문의 형태
switch(표현식) {
	case 표현식: 무장 리스트opt
    default; 문장 리스트opt
}
  • switch문에서 표현식의 평가 값과 일치하는 case 문을 수행한다.
var exp = 1;

switch(exp) {
	case 1:
    	log(100);
    case 2:
    	log(200);
}

=>
100
200

break가 없으면 해당하는 case부터 전부 실행.
  • break의 사용 예
var exp = 1;

switch(exp) {
	case 1:
    	log(100);
        break;
    case 2:
    	log(200);
}

=>
100

break로 인해 해당 case 실행 후 종료.
  • default : 일치하는 case가 없으면 실행된다.
var exp = 7, value;

switch(exp) {
	case 1:
		value = 100;
    default:
    	value = 700;
    case 2:
    	value = 200;
}

log(value);

=>
200

해당하는 값이 없으므로 default 실행, break가 없으므로 다음 문장 실행
  • OR (||) 형태 예
var exp = 3;

switch(exp) {
	case 2:
    case 3:		// 2 or 3
    	log(100);
}

=>
100

# try ~ catch

  • try ~ catch문의 형태
1. try 블록 catch (식별자) 블록

2. try 블록 finally 블록

3. try 블록 catch (식별자) 블록 finally 블록
  • try 문에서 예외 발생을 인식, 예외가 발생하면 catch 블록 실행
var value;

try {
	value = ball;
} catch(error) {
	log("catch 실행");
}

=>
catch 실행

value 변수를 선언만 했고, value변수에 ball이라는 변수를 할당,
ball 변수가 선언되어 있지 않으므로 try 문에서 예외(에러) 발생하여 catch문 실행

try ~ catch 문에 위 사항들을 작성하지 않았다면 에러로 인행 프로그램이 중단된다.
하지만, try ~ catch문을 통해 프로그램 중단 없이 예외 발생 시 catch문이 실행된다.
  • 서버에서 데이터를 가져올 때(통신을 할 때)는 에러 발생등에 사전에 대비하여 프로그램이 중단되는 일이 생기지 않도록 반드시 try ~ catch문에 작성을 해야 한다.
  • finally 블록은 예외 발생과 관계없이 실행된다.
var sports;

try {
	sports = ball;
} catch(error) {
	log("catch 실행");
} finally {
	log("finally 실행");
};

=>
catch 실행
finally 실행

sports 변수에 ball 할당 시 ball 변수 선언된 적이 없어 에러 발생.
이로 인해 catch문 실행, finally 실행
만약 에러가 발생하지 않았을 경우엔 try문 실행, finally 실행

# throw

  • throw 형태
throw 표현식;
  • 명시적으로 예외를 발생시킬 때 사용한다.
  • 예외가 발생하면 catch문을 실행한다.
try {
	throw "예외 발생시킴";
    var sports = "스포츠";
} catch(error) {
	log(error);
    log(sports);
}

=>
예외 발생시킴
undefined

throw문으로 인해 의도적으로 에러 발생하여 throw 메세지 출력; 세미콜론 다음 문장은 실행되지 않는다.
try {
	throw {
    	msg: "예외 발생시킴".
        bigo: "임의의 이름 사용"
    };
} catch(error) {
	log(error.msg);
    log(error.bigo);
};

=>
예외 발생시킴
임의의 이름 사용
try {
	throw new Error("예외 발생시킴");
} catch(error) {
	log(error.message);
};

=>
예외 발생시킴

# strict 모드

  • strict 모드 형태
"use strict"
  • 엄격하게 자바스크립트(JS) 문법 사용의 선언
  • 작성한 위치부터 적용된다.
book = "책";
log(book);

=>
책

var을 작성하지 않은 형태
var을 사용하여 변수를 선언해야 하지만, 변수가 선언되고 "책"이 할당된다.
user strict 작성

"use strict";
try {
	book = "변수 선언하지 않음";
    log(book);
} catch(error) {
	log(error.message);
}

=>
변수 선언하지 않음

var 키워드를 작성하지 않은 형태
use strict로 코딩 실수를 예방할 수 있다.
  • ES 5부터 지원한다.
반응형
반응형

# 자바스크립트 학습

# 문장 (Statement)

  • ; (세미콜론)
  • 세미콜론은 문장을 끝나게 하는 역할을 한다.
var book = "책";

# 화이트 스페이스

  • White Space
  • 사람 눈에 보이지 않는 문자
  • 가독성을 위한 것이다.
  • 문자마다 기능을 갖고 있다.
  • 종류는 아래와 같다.
1. 수평 탭 : TAB
2. 수직 탭 : VT
3. 폼 넘기기 : FF
4. NBSP (No-break space) : NBSP
5. BOM (Myte Order Mark) : BOM
6. Line Feed : LF
7. Carriage Return : CR
8. Line Separator : LS
9. Paragraph Separator : PS

# 세미콜론 자동 삽입

  • 세미콜론은 문장 끝에 작성한다.
  • 문장 끝에 세미콜론을 작성하지 않으면, 자바스크립트는 세미콜론을 자동으로 삽입하여 문장을 끝나게 한다.
var one = 1
var two = 2;
log(one);

=>
1

자바스크립트 엔진이 분석하여 세미콜론을 자동으로 삽입하여 문장을 끝나게 한다.
(줄을 분리해야 화이트 스페이스(LF/CR) 앞에 세미콜론을 자동 삽입한다.)
(한 줄에 작성할 경우 삽입하지 않는다.)

# 블록

  • {문장 리스트opt} 중괄호의 형태
  • 실행 그룹으로, 블록 안의 모든 문장을 실행한다.
var one = 1, two = 1;
if (one === two) {
	var result = one + two;
    log(result);
};

=>
2
  • 문장 리스트 : { } 안에 작성된 모든 문장을 의미, 문장 리스트 작성은 선택(option)이다.

# if

  • if (표현식) 문장1 
  • if (표현식) 문장1 else 문장2
  • 조건에 따른 처리로서 먼저 표현식을 평가한다. 평가 결과를 true/false로 변환, true이면 문장1 실행, false이면 문장2를 실행한다.
1. 블록을 사용하지 않은 형태.
var a = 1, b = 1;
if (a === b) log("블록을 사용하지 않음");

if (a === b)
	log("1번 줄")
    log("2번 줄");
    
=>
블록을 사용하지 않음
1번 줄
2번 줄



2. 블록을 사용한 형태
var a = 1, b = 1;
if (a === b) {
	log("블록 사용");
}

=>
블록 사용



3. if else, 블록 사용하지 않음
var a = 1, b = 2;
if (a === b) 
	log("블록 사용하지 않음. true");
else
	log("블록 사용하지 않음. else");
    
=>
블록 사용하지 않음, else



4. if else, 블록 사용
var a = 1, b = 2;
if (a === b) {
	log("블록 사용. true");
} else {
	log("블록 사용. else");
}

=>
블록 사용. else

# debugger

  • 디버거 작성 위치에서 실행을 멈춘다.
  • 브라우저의 개발자 도구 창이 열려 있을 때만 멈춘다.
  • ES5부터 지원한다.
var sports = "스포츠";
debugger;
log(sports);

=>
스포츠
debugger가 있는 위치에서 실행이 멈춘다.(debugger에서 조치를 취해야 다음이 실행된다.)
  • debugger 사용방법
1. 개발자 도구 열기(Ctrl + Shift + I) => 윈도우 기준
	- 크롬 맞춤설정 및 제어
    - 도구 더보기
    - 개발자 도구(D)
2. 브라우저 새로고침 실행(F5)
3. debugger 위치에서 실행 멈춤
4. debugger 종료(F8)


* 윈도우 기준 debugger 단축키
F8 : debugger 종료
F11 : debugger 다음 라인으로 이동
브레이크포인트 : 희망하는 라인 번호 좌측 클릭

# while

  • while (표현식) 문장
  • 표현식의 평가 결과가 false가 될 때까지 문장을 반복하여 실행
  • 반복이 종료되는 조건이 필요하다. (없을경우 무한 반복된다.)
var k = 1;
while (k < 3) {
	log(k);
    k++; 
}

=>
1
2

# do ~ while

  • do 문장 while (표현식)
  • 처리 방법은 while문과 동일하지만, 단, do 문을 먼저 실행한다.
var k = 0;
do {
	log("do:", k);
    k++;
} while (k < 3) {
	log("while:", k);
};

=>
do:0
do:1
do:2
while:3

do~while문의 경우 true일 때 do 문장 실행, false이면 while문 실행

# for( )

  • for (초깃값opt; 비교opt; 증감opt) 문장
  • 2번째의 비교 표현식의 평가 결과가 true인 동안 문장을 반복 실행한다.
for (var k = 0; k < 2; k++) {
	log(k);
};

=>
0
1

## for( )문 옵션

  • for (초깃값opt; 비교opt; 증감opt) 문장에서 opt는 생략 가능하다.
  • 증감 생략
for (var l = 0; k < 3;) {
	log(k);
    k++;
};

=>
0
1
2
  • 초깃값과 증감 생략
var k = 0;
for (; k < 3;) {
	log(k);
    k++;
};

=>
0
1
2
  • 비교와 증감 생략
for ( var k = 0; ;) {
	log(k);
    k++;
    if (k > 2) {
    	break;	//for()문 종료
    };
};
  • 모두 생략
var k = 0;
for (;;) {
	log(k);
    if (k === 2) {
    	break;	// for()문 종료
    };
    k++;
};

=>
0
1
2

# break

  • break;
  • break 식별자;
  • 반복문 종료
  • for, for~in, while, do~while, switch에서 사용한다.
1. break 위치에서 종료
var k = 0, m = 0;
while (k < 3) {
	m++;
    if (m === 2) {
    	break;
    };
    log(m);
};

=>
1
2. 세미콜론 자동 첨부
for (var k = 0; k < 3; k++) {
	if (k === 1) {
    	break
        log("k === 1");
    };
    log(k);
};

=>
0

break 끝에 세미콜론을 자동으로 첨부.
break 아래 log는 실행하지 않는다.

# continue

  • continue;
  • continue 식별자;
  • 반복문의 처음으로 분기한다.
for (var k = 0; k < 5; k++) {
	if (k === 2 || k === 3) {
    	continue;
    };
    log(k);
};

=>
0
1
4

k === 2 or k === 3일때 continue로 반복문으로 돌아감(k++로)
  • for, for~in, while, do~while에서 사용한다.
반응형
반응형

# 자바스크립트 학습

# 관계 연산자 (Relational)

  • 관계 연산자는 작거나, 크거나 등을 비교하는 연산자 이다.
  • 관계 연산자에는 <, >, <=, >= 연산자, instanceof 연산자, in 연산자가 포함된다.

## > 연산자

  • 부등호 : Greater-than
  • 양쪽이 Number 타입일 때, 왼쪽이 오른쪽 보다 크면 true, 아니면 false를 반환한다.
log((1 + 2) > 1);

=>
true

먼저 표현식을 평가하여 값을 구한다. (1+2) => 3
3 > 1 에서 3이 1보다 크므로 true를 반환한다.
(숫자로 비교하는 것을 수학 값으로 비교한다고 말한다.)

## String 타입 비교

log( 1 > "A" );

=>
false

한 쪽이 String 타입이면 false를 반환한다.
  • 양쪽이 모두 String 타입이면 유니코드 사전 순서로 비교한다.
log(("\u0033" > "\u0032"));		// \u0033 : 3, \u0032 : 2
log("A" > "1");		// A : \u0041, 1 : \u0031
log("가" > "다");

=>
true
true
false

코드 포인트는 유니코드를 등록할 때 부여한다.
유니코드 등록 순서로 비교 or 유니코드 사전 순서로 비교한다고 말한다.
한글도 유니코드 사전 순서로 비교한다.
  • 문자 하나씩 비교
log("A07" > "A21");

=>
false

A, 0, 7
A, 2, 1 
각 각 유니코드 코드 포인트 값을 비교
  • <, <=, >= 는 비교 기준만 다르다.

# == 연산자

  • 동등 연산자
  • 왼쪽과 오른쪽 값이 같으면 true, 다르면 false를 반환한다.
  • 값 타입은 비교하지 않는다. (1과 "1"이 같음)
log(1 == "1");

=>
true

값 타입이 다르면, 숫자:문자 or 문자:숫자 일때 
문자 타입을 숫자 타입으로 변환하여 비교한다.
var value1;
log(value1 == undefined);

=>
true

value1를 선언만 했으므로 undefined


var value2;
log(value2 == null);

=>
false

value2를 선언만 했으므로 undefined		
undefined : 값, 타입은 undefined
unll : 값, 타입은 object
그런데, 값만 비교하므로 true

# != 연산자

  • 부등 연산자
  • 왼쪽과 오른쪽 값이 다르면 true, 같으면 false를 반환한다.
  • a != b와 !(a == b)가 같다.

# === 연산자

  • 일치 연산자
  • 왼쪽과 오른쪽의 값과 타입이 모두 같으면 true, 값 또는 타입이 다르면 false
  • 1 === 1 의 경우 true
  • 1 === "1" 의 경우 값은 같으나, 타입이 다르므로 false
log(1 === "1");

=>
false
  • undefined, null 비교
var value;
log(value == null);
log(value === null);

=>
true
false

value 변수를 선언만 했으므로 값은 undefined
undefined 는 값으로, 타입은 undefined
null 는 값으로, 타입은 object

undefined == null	// 둘다 값이므로 true
undefined === null	// 둘다 값이지만, 타입이 다르므로 false

# !== 연산자

  • 불일치 연산자
  • 값 또는 타입이 다르면 true, true가 아니면 false

# 콤마 연산자

  • 기호 : , (Comma)
  • 콤마를 이용하여 표현식을 분리한다.
  • var a = 1, b = 2; (콤마로 분류, var는 한 번만 작성)

# ( ) 연산자

  • 그룹핑 연산자
  • 소괄호( ) 안의 표현식을 먼저 평가한다.
  • 평가한 값을 반환한다.
  • 5 / (2 + 3)

# | | 연산자

  • 논리 OR 연산자
  • 표현식의 평가 결과가 하나라도 true이면 true, 아니면 false
  • true가 되는 변수 값 반환
var value, zero = 0, two = 2;
log(value || zero || two);

=>
2	// true가 되는 시점의 변수 값 반환(two일때 반환)

value의 변수 값이 undefined이므로 false
zero 변수 값이 0 이므로 false
two 변수 값이 2 이므로 true
  • 모두가 false 일 때
var value, zero = 0;
log(zero || value);

=>
undefined	// 마지막가지 비교하였는데 모두가 false이면 마지막 변수 값 반환

zero 는 0 이므로 false
value 는 undefined 이므로 false
  • true이면 비교 종료
var one = 1;
log(one === 1 || two === 2);

=>
true

one === 1 은 true 이므로 다음은 비교하지 않는다.

# && 연산자

  • 논리 AND 연산자
  • 표현식의 평가 결과가 모두 true이면 true, 아니면 false
  • 모두가 true일 때
var one = 1, two = 2;
log(one && two);

=>
2	// true가 되는 마지막 변수값인 2 반환
  • 왼쪽 결과가 false이면 오른쪽은 비교하지 않는다.
var one = 1, zero = 0;
log(one && zero && nine);

=>
0

# 조건 연산자

  • 3항 연산자 라고도 한다.
  • 기호 : 조건 ? a : b 
  • 조건의 표현식을 먼저 평가하여 true이면 a의 결과를 반환하고, false이면 b의 결과를 반환한다.
log(1 === 1 ? "같음" : "다름");
log(1 === "1" ? "같음" : "다름");

=>
같음
다름

# 연산자 우선 순위

 

연산자 우선순위

연산자 우선순위는 연산자를 실행하는 순서를 결정합니다. 우선순위가 높은 연산자가 먼저 실행됩니다.

developer.mozilla.org

 

반응형

+ Recent posts