Day34

2020. 11. 17. 15:30교육과정/KOSMO

키워드 : 자바스크립트 기초 문법 / 달력만들기

 

 

****

 

 

1. 자바스크립트 데이터 타입
1) 데이터타입 + 변수
2) 연산자
3) 제어문
4) 유용한 객체 - String, Array, Math, Date, Map, Set

"자바스크립트는 자바스크립트이다."

 

  현재 미래지향  
Presentation(UI) HTML+CSS+JS HTML+CSS+JS => angular / react / vue
Application(Pg) JSP(SAP, PHP) nodeJS (기본적으로 WebServer역할을 함)
Database ORACLE mongoDB  
   --> 웹서버 프로그램이
       별도로 필요함
--> 최신 JS로 만들어져 
     다소 어려움
 



(+) [도서] 함수형 자바스크립트 프로그래밍 + inflearn ( 무료 인강 )

 

 

* HTML5에 추가된 JavaScript API : Geolocation API (사용자의 지리적인 위치를 취득할 때) / Canvas (JavaScript로 동적인 이미지를 그릴 때) / FileAPI (로컬의 파일 시스템을 읽고 쓸 때) / Web Storage (로컬 데이터를 저장할 때) / Indexed Database (키/값의 세트로 JavaScript를 객체 관리할 때) / Web Workers (백그라운드에서 JavaScript를 병렬 실행할 때) / Web Sockets (클라이언트-서버 간의 쌍방향 통신을 실시하기 위한 API)

 

* JS의 유연성은 컴파일러가 깐깐하지 않기 때문이며 그로 인한 장단점이 있다. (버그나 보안상의 문제를 일으키기 쉬움)

* ECMAScript로 최신 개정판은 ES6이라고 한다. (관련 참고 도서 多)

* JS로 할 수 있는 일 : HTML 페이지 변경 / CSS 스타일 변경 / ★ form의 유효성 검증 ★ / 마우스와 키보드 이벤트에 대한 처리 / 웹 브라우저 제어 / 쿠키 처리 / 동적 효과 처리 / Ajax 기술로 웹 서버와 통신 (사용자 모르게 back에서 서버와 통신하는 것)

 

* 수업에서는 내부 스크립트로 사용하지만, 실무에서는 외부 스크립트로 사용하게 된다. 
* 외부 + 내부 같이 기술하려면 일반적으로 외부스크립트를 먼저 기술한다. 

* <body>나 <head> 태그 안 쪽에 JS의 <script> 태그가 자리한다. 
* <!-- ~~~~~~~ --> 는 JS에서 주석이 아니다. 과거에는 JS를 인식하지 못 할 경우에 주석처리 되도록 한 것이나, 현재는 JS를 거의 다 인식하기 때문에, <!-- --> 안의 코드가 실행된다. 


* 문장 끝에는 세미콜론( ; )을 붙인다. 
* 문장 도중에 공백이나 개행을 포함하는 것도 가능하다. 
* 대소문자를 구분한다.

* <script> 태그 안 쪽에서는 자바와 동일하게 //, /* */ 주석을 사용한다. 

 

변수 선언 : var ............... let / const
             var없이도 선언 가능하나 비추! ES5, ES6에서 추가된 변수, const는 변하지 않는 값(상수)일 때 사용하는 변수 / let은 변하는 값일 때 사용하는 변수


* 변수 명명 규칙 : 영문자, 숫자, _, $ 로 조합 / 첫번째 문자는 숫자 사용 불가 / 대소문자 구별 / 예약어 사용 불가

* 데이터 타입 : 1) 기본형 - 수치형(number) / 문자열(string) / 논리형(boolean) / 특수형 (null, undefined)
                   2) 참조형 - 배열(array) / 객체(object) / ★ 함수(function) ★

 

 

* JS 에러 여부 확인 : 웹 페이지에서 F12로 개발자 모드에 들어가면 우측 상단에 빨간 X-box 눌렀을 때 확인 가능
--> 매번 개발자모드 들어가서 확인하는 것이 번거로우므로 확장 프로그램을 설치하는 편이 좋다. 
>> 더보기 - 도구 더보기 - 확장프로그램 - 좌측 메뉴 - Chrome 웹 스토어 열기 -  JavaScript Error Notifier 검색 후 Chrome에 설치 - 개발하던 웹 페이지로 돌아왔을 때 에러상황을 하단에서 바로 알려줌

 

 

* JAVA의 경우 : String bs = "문자열"; 이라고 타입을 명시하고 값을 대입해야 함
* JS의 경우 : var bs = "문자열"; 이라고 타입 명시 없이 값을 대입 하는 순간 타입이 결정됨
* JAVA와 달리 같은 변수에 다른 데이터를 넣어도 에러가 발생하지 않는다. 
* JS는 컴파일언어가 아닌 인터프리터 언어라서, 한 줄씩 읽고 수행하다가 도중에 문제가 발생한 시점부터 수행하지 않는다. 

 

let은 변수의 중복선언을 허용하지 않으며 블럭 범위(scope)로 인식하여, 코드에 문제가 있을 경우 컴파일 에러가 발생한다. 
const는 값을 재대입할 수 없는 상수 선언이며 명명할 때 모두 대문자에 단어 사이는 _로 표시하도록 권장된다. 


* JS는 이진수 상태에서 계산하다보니 소숫점 연산이 정확하지 않다. 

* const로 배열을 만들었을 경우, index가 바뀌지 않도록 내용물만 바꾸는 것은 가능하다. 

 


* 리터럴 : 데이터형에 보관되는 값 그 자체 (숫자 리터럴, 문자열 리터럴, 배열 리터럴)

 

*undefined : 값이 아직 지정되지 않았을 때 

...........NULL과는 다름!

 

 

* 자바스크립트에서 프린트 하는 방법

document.writeln(~~~~~~~~~~~) : 웹페이지에 출력

console.log(~~~~~~~~~~~~~~) : 웹페이지 개발자모드의 console에 출력

 

* other 연산자 (...) : 배열의 나머지 값들을 모두 모아서 하나로 담아냄

let data = [10, 20, 30, 40, 50];

let [v1, v2, ...v3] = data;
console.log(v1);
console.log(v2);
console.log(v3);

출력결과 : 10,         20,         30,40,50

 

 

* 자바에서 두 값을 교환하기

 let d1 = 100, d2 = 200;
 [d2, d1] = [d1, d2];	// 두 값을 서로 교환할 때 JAVA에서는 임시변수가 필요했으나 JS는 바로 가능
 console.log('d1:' + d1);
 console.log('d2:' + d2);

출력결과 : d1 : 200       /   d2 : 100

 

 

 

* 객체 분할

* json 구조 -- json 구조로 DB에 저장하는 것을 mongoDB 
* 객체에서는 멤버 이름으로 value를 출력할 수 있다. 

 let book = { title : "자바스크립트", publish : "코스모", price : 30000 };
 let {title, publish} = book;
 document.write(title + "<br/>");
 document.write(publish + "<br/>");

>> 멤버 이름으로 value를 출력할 수 있다. 

 

<01_datatype.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자바스크립트의 자료형</title>
<script type="text/javascript">

/* 	자바 : 컴파일 언어 (컴파일 후의 파일 : class 파일)
 	자바스크립트 / 파이썬 : 인터프리터 언어
 */
 
 
/* 1. 자바스크립트는 데이터타입에 관대하다
     변수를 선언할 때 데이타타입을 정하지 않는다
		(1) 변수 선언 : var
*/
// JAVA의 경우 : String bs = "문자열"; 이라고 타입을 명시하고 값을 대입해야 함
// JS의 경우 : var bs = "문자열"; 이라고 타입 명시 없이 값을 대입 하는 순간 타입이 결정됨
var bs = "문자열";
document.writeln("변수의 값 : " + bs + "<br/>");
document.writeln("변수의 타입 : " + (typeof bs) + "<br/>");
// ln은 HTML 문서상의 개행으로 출력시 화면에 보이는 개행이 아니다. 따라서 별도로 개행 태그를 사용해줘야 한다.
console.log("변수의 값 : " + bs);

bs = 100;
document.writeln("변수의 값 : " + bs + "<br/>");
document.writeln("변수의 타입 : " + (typeof bs) + "<br/>");
// JAVA와 달리 같은 변수에 다른 데이터를 넣었음에도 에러가 발생하지 않는다. 


/*   (2) let  (es6)
 		- 변수의 중복 선언을 허용하지 않는다
 		- 블럭 범위(scope)를 인식한다 -> 나중에 확인
 */
/* let msg = "기존";
msg = "변경";
document.writeln("변수의 값 : " + msg + "<br/>");

var bs = "새로운 값";
document.writeln("2. 변수의 값 : " + bs + "<br/>");

let msg = "새로운 값";
document.writeln("2. 변수의 값 : " + msg + "<br/>"); */



 /* (3) const : 상수선언 (es6)
	- 값을 재대입 금지
	- 명명 권장 : 모두 대문자에 단어사이는 _로 표시
*/

/*  const PI = 3.14;
let radium = 5;
PI = 1.11;			// 컴파일 에러 발생함
let circumference = 2 * PI * radium;
document.writeln("원주율 : " + circumference + "<br/>");   */
// JS는 이진수 상태에서 계산하다보니 소숫점 연산이 정확하지 않다.

/* const data = [1, 2, 3];
//data = [11, 22, 33]; 		// 불가 (data의 index가 바뀌는 것) 
data[1] = 2000;				// 내용물 일부만 바꿔치기 하는 것은 가능하다. (참조형인 data의 index는 그대로임)
document.writeln("data : " + data + "<br/>"); */
 
//----------------------------------------------------------------
// 2. 리터럴 - 변수의 값
/* var   arr = [ '안녕', 'Hello', 'Hola', '곤니찌와' ];
document.writeln("배열의 요소 : " + arr[1] + "<br/>");
 		
var   arr2 = [ '안녕', [ 'Hello', 'Hola' ], '곤니찌와' ];
document.writeln("배열의 요소2 : " + arr2[1][0] + "<br/>");

// json 구조 -- json 구조로 DB에 저장하는 것을 mongoDB
// 객체에서는 멤버 이름으로 value를 출력할 수 있다. 
var  obj = { x : '안녕',  y : 'Hello' ,  z : '곤니찌와' };
document.writeln("obj : " + obj.y + "<br/>");
document.writeln("obj : " + obj['y'] + "<br/>");
obj=100;					// 이전까지는 datatype이 object였으나 이후로 number로 바뀜
console.log( typeof arr );
console.log( typeof obj );

// undefined : 값이 아직 지정되지 않았을 때 
// null과는 다름
var x;
console.log(x);
console.log(obj.a) */


//-------------------------------------------------------
/* 3. 분할 대입 (destructuring assignment) : (es6)
 			- 배열과 객체의 요소를 분할하는 부분
 		(1) 배열 분할
 */
 let data = [10, 20, 30, 40, 50];
 let a0 = data[0];
 let a1 = data[1];
 let a2 = data[2];
 document.writeln(a0+ a1+ a2 + "<br/>");  
 console.log(a0, a1, a2 )
 
 let [a, b, c, d, e] = data;
 document.writeln(a+ b+ c + "<br/>");
 console.log(a, b, c);
 
 // others 연산자 ... : 나머지 값들을 모두 모아서 담아줌
 let [v1, v2, ...v3] = data;
 console.log(v1);
 console.log(v2);
 console.log(v3);
 
 let d1 = 100, d2 = 200;
 [d2, d1] = [d1, d2];	// 두 값을 서로 교환할 때 JAVA에서는 임시변수가 필요했으나 JS는 바로 가능
 console.log('d1:' + d1);
 console.log('d2:' + d2);
 
 /*  (2) 객체 분할
  */
 let book = { title : "자바스크립트", publish : "코스모", price : 30000 };
 let {title, publish} = book;
 document.write(title + "<br/>");
 document.write(publish + "<br/>");
  
 
</script>
</head>
<body>

</body>
</html>

 


2. 자바스크립트의 연산자

* 자바스크립트에서는 실수형을 2진수로 변환하여 저장하고 연산하기 때문에 부정확함

--> 이를 해결하기 위해 정수형으로 만든 뒤 연산해주면 된다. 

document.write( 0.2 * 3 == 0.6 );	// false
document.write( 0.2*10 * 3 == 0.6*10 );	// true 정수형으로 만들어서 계산

 

*  ==와 === 차이는?

 ==, != 는 값만 비교
 ===, !==는 값과 자료형 비교

var num = 10;
var str = '10';
if (num == str) document.write('같다' + "<br/>");
else (document.write('다르다<br/>'))	

if (num === str) document.write('2.같다' + "<br/>");
else (document.write('2.다르다<br/>'))

출력결과 : 같다(내용물은 10으로 같음)           /          2.다르다 (데이터타입이 number와 string으로 다름)

 

 

* 기본형과 참조형

var a = 10;
var b = 10;
if ( a === b ) document.write('3.같다' + "<br/>");
else (document.write('3.다르다<br/>'))

var a = ['java', 'script'];
var b = ['java', 'script'];
if ( a === b ) document.write('4.같다' + "<br/>");
else (document.write('4.다르다<br/>'))

출력결과 : 3.같다 (내용물과 데이터타입 모두 같음)
              /          4.다르다 (참조형은 인덱스가 달라서 값이 같아보여도 실제로는 아니다)

 

 

* boolean형    ( 0 : false , 1: true )

console.log(1 == true);		// true
console.log(0 == true);		// false
console.log(1 == false);	// false
console.log(0 == false);	// true

console.log(2 == true);		// false
console.log(2 == false);	// false

<02_operation.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자바스크립트의 연산자</title>
<script type="text/javascript">

//1.  실수형 계산에는 주의 -> 2진수로 변환하여 저장하고 연산하기 때문에 발생
document.write( 0.2 * 3 == 0.6 );	// false
document.write( 0.2*10 * 3 == 0.6*10 );	// true 정수형으로 만들어서 계산



//2.==와 === 차이는?
// ==, != 는 값만 비교
// ===, !==는 값과 자료형 비교
var num = 10;
var str = '10';
if (num == str) document.write('같다' + "<br/>");
else (document.write('다르다<br/>'))	

if (num === str) document.write('2.같다' + "<br/>");
else (document.write('2.다르다<br/>'))	


		
// 3. 기본형과 참조형
var a = 10;
var b = 10;
if ( a === b ) document.write('3.같다' + "<br/>");
else (document.write('3.다르다<br/>'))

var a = ['java', 'script'];
var b = ['java', 'script'];
if ( a === b ) document.write('4.같다' + "<br/>");
else (document.write('4.다르다<br/>'))



// 4. boolean형
// 		0 : false , 1: true
console.log(1 == true);		// true
console.log(0 == true);		// false
console.log(1 == false);	// false
console.log(0 == false);	// true

console.log(2 == true);		// false
console.log(2 == false);	// false

</script>
</head>
<body>

</body>
</html>

 

 

 

3. 모양대로 출력되는 코드 작성하기

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
<script type="text/javascript">

document.write('<table border="2">');

for( var i=0; i<5; i++) {
document.write('<tr>');
	for ( var j=1 ; j<6 ; j++) {
	document.write('<td>' + (j+(i*5)) +'</td>');
	}
document.write('</tr>');
}
document.write('</table>');


</script>

<03_for연습.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 03_for연습.html </title>

<script type="text/javascript">

document.write('<table border="2">');

for( var i=0; i<5; i++) {
document.write('<tr>');
	for ( var j=1 ; j<6 ; j++) {
	document.write('<td>' + (j+(i*5)) +'</td>');
	}
document.write('</tr>');
}
document.write('</table>');


</script>

</head>
<body>

</body>
</html>

 


4. 자바스크립트에서의 for 문

* 원래 for문

for ( var i=0 ; i<arr.length ; i++ ) {
	document.write( arr[i] + "<br/>");
}

 

* [참고] 자바의 향상된 for 문.......................... for ( 요소타입 : 집합 ) { }

 

* for ... in 문 : 요소를 순서대로 처리

      for 요소 in 집합 
      요소 : 집합의 키 (배열: 인덱스, 객체: 멤버변수명)

//집합이 배열인 경우

for ( var i in arr ) {
	document.write( i + ":" + arr[i] + "<br/>");
}

// 집합이 객체인 경우

var obj = { first: "길동", second: "홍" };
for (var j in obj) {
	document.write( j + ":" + obj[j] + "<br/>");
}

 

 

(*) for ... of 문 : 열거형의 요소를 순서대로 처리하기 (es6)

--->>인덱스가 아니라 그 값을 가지고 옴

for ( var i of arr ) {
	document.write( i + "<br/>");
}

But!!!!!!!

//집합이 객체인 경우.. for of는 error 발생함

var obj = { first: "길동", second: "홍" };
for (var j of obj) {
	document.write( j + "<br/>");
}

<03_for_.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 새로운 for 문장 </title>
<script type="text/javascript">

var  arr = ['송혜교', '김태희', '전지현' ];

// 0. 원래 for문
for ( var i=0 ; i<arr.length ; i++ ) {
	document.write( arr[i] + "<br/>");
}
// [참고] 자바의 향상된 for 문
//			for ( 요소타입 : 집합 ) { }

// 1. for...in :  요소를 순서대로 처리하기
/* 
 		for 요소 in 집합
 		요소 : 집합의 키 (배열: 인덱스, 객체: 멤버변수명)
 */
// 집합이 배열인 경우
 for ( var i in arr ) {
	document.write( i + ":" + arr[i] + "<br/>");
}
 /*
// 집합이 객체인 경우
var obj = { first: "길동", second: "홍" };
for (var j in obj) {
	document.write( j + ":" + obj[j] + "<br/>");
} 
*/


//----------------------------------------------------
// 2. for...of  (es6) : 열거형의 요소를 순서대로 처리하기
// 인덱스가 아니라 그 값을 가지고 옴
for ( var i of arr ) {
	document.write( i + "<br/>");
}

/*
//집합이 객체인 경우.. for of는 error 발생함
var obj = { first: "길동", second: "홍" };
for (var j of obj) {
	document.write( j + "<br/>");
}
*/


</script>
</head>
<body>

</body>
</html>

 


5. 객체 함수

//////////////////////////////////////////////////////////////////////////////
//						내장형 객체 (String)								   //
//////////////////////////////////////////////////////////////////////////////
// 검색
indexOf (substr, s)			// 1부터 시작하여 해당문자가 있는 위치
lastIndexcOf (substr, s)	// 1부터 시작하여 해당문자가 마지막으로 있는 위치

// 부분 문자열
charAt (n)					// 0부터 시작하여 n번째 문자 추출
slice (n)					// 0부터 시작하여 n번째 문자부터 이후로 모두 추출
slice (n, m)				// 0부터 시작하여 n번째 문자부터 m번재 이전까지 추출
substring (n, m)			// 0부터 시작하여 n번째 문자부터 m번째까지 추출
substr (n, count)			// 0부터 시작하여 n번째 문자부터 count갯수만큼 추출
split(str, limit)			// 문자를 분할하여 배열로 출력 (limit은 최대 분할 수)

// 정규표현
match (reg)					// 정규표현 reg로 검색하여 일치한 부분 문자열을 넘김
replace (reg, rep)			// 정규표현 reg로 검색하여 일치한 부분 문자열을 rep로 대치
search (reg)				// 정규표현 reg로 검색하여 일치한 맨 첫 문자의 위치를 넘김

// 대소문자
toLowerCase ()				// 소문자로 변경
toUpperCase ()				// 대문자로 변경

// 그 외 
concat (str)				// 문자열 뒤에 str을 추가(연결)
length						// 문자열의 길이를 넘김

// 검색
startsWith (search, n)		// 문자열이 search로 시작하는지 (n은 검색시작 위치)
endsWith (search, n)		// 문자열이 search로 종료하는지 (n은 검색시작 위치)
includes (search, n)		// 문자열이 search를 포함하는지 (n은 검색시작 위치)

// 코드 변환
codePointAt(n)				// n번째 문자를 UTF-16 인코딩된 코드 포인트값으로 변환
fromCodePoint(num)			// 코드 포인트값으로부터 문자열을 생성

// 그 외

repeat(num)					// 문자열을 num 숫자만큼 반복한 것을 얻어옴

//////////////////////////////////////////////////////////////////////////////
//						내장형 객체 (Number)								   //
//////////////////////////////////////////////////////////////////////////////

// 프로퍼티
MAX_VALUE						// 이용할 수 있는 최대값 1.79E+308
MAX_SAFE_VALUE					// Number로 안전하게 표현할 수 있는 최대정수 값
MIN_VALUE						// 최소값 (0에 가까운 값) 5.00E-324
MIN_SAFE_VALUE					// Number로 안전하게 표현할 수 있는 최소정수 값
NaN								// 수치가 아니다 (not a number)
NEGATIVE_INFINITY				// 음수의 무한대
POGITIVE_INFINITY				// 양수의 무한대
// ★ number 객체의 프로퍼티는 static 이다. 


// 메소드
toExponential(dec)				// 지수 형식으로 변환
toFixed(dec)					// 소수점 이하의 행수 반올림
toPresicion(dec)				// 지정 행수로 변환
inNaN(num)						// NaN인지 판정
isFinite(num)					// 유한값인지 판정
isInteger(num)					// 정수값인지 판정
parseInt(str)					// 문자열을 정수로 변환
parseFloat(str)					// 문자열을 실수로 변환

 

//////////////////////////////////////////////////////////////////////////////
//						내장형 객체 (Array)								   //
//////////////////////////////////////////////////////////////////////////////

// 변환
concat (arr)				// arr 배열을 현재의 배열에 연결
join (del)					// 배열 내의 요소를 구분문자 del로 연결
slice (n, m)				// 0부터 시작하여 n번째 문자부터 m번재 이전까지 추출

// 추가 / 삭제
pop ()						// 배열 끝의 요소를 얻어오고 삭제
push (data)					// 배열 끝에 요소를 추가
shift ()					// 배열의 맨 앞에 요소를 얻어오고 삭제
unshift (data1, data2)		// 배열의 맨 앞에 지정된 요소를 추가

// 정렬
reverse()					// 역순으로 정렬
sort()						// 요소를 오름차순으로 정렬

// 기타
length						// 배열의 크기
toString()					// 요소들을 문자열로 변환

// 기본
entries()					// 모든 키/값을 반환
keys()						// 모든 키를 반환
values()					// 모든 값을 반환

// 가공
from(alike)					// 배열과 비슷한 종류의 객체와 열거 가능한 객체를 배열로 변환(정적 메소드)
of (e1, ...)				// 가변길이 인수를 배열에 변환 (정적 메소드)
copyWithin(target, start, end)		// start ~ end-1번째의 요소를 tatget번째 위치부터 복사
fill (var, start, end)		// 배열 내의 start ~ end-1번째의 요소를 var로 취환

 

var str = '너의 삶 속에 나의 삶을 넣어 삶을 영위하자';

var msg = '자바에서 웹프로젝트까지 열심히 하자!';

var  text = '♡해yo';

 

<04_String.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> String 객체 </title>
<script type="text/javascript">		
	var str = '너의 삶 속에 나의 삶을 넣어 삶을 영위하자';
	document.writeln( str.indexOf('삶') + '<br/>');	// 4
	document.writeln( str.lastIndexOf('삶')+ '<br/>');	// 17
	document.writeln( str.indexOf('삶을') + '<br/>');	// 11
	document.writeln( str.length + '<br/>');	// 24
	
	document.writeln( str.startsWith('삶') + '<br/>');	// false
	document.writeln( str.endsWith('삶') + '<br/>');		// false
	document.writeln( str.includes('삶') + '<hr/>');		// true

	
	var msg = '자바에서 웹프로젝트까지 열심히 하자!';
	document.writeln( msg.charAt(3)+ '<br/>');	// 서
	document.writeln( msg.slice( 5, 12 )+ '<br/>');	// 웹프로젝트까지
	document.writeln( msg.substring( 5, 12 )+ '<br/>');	//   
	document.writeln( msg.substr(5, 7 ) + '<br/>');	// 웹프로젝트
	document.writeln( msg.split(' ')+ '<br/>');	// {자바에서, 웹프로젝트까지, 열심히, 하자!}
	document.writeln( msg.concat('화이팅')+ '<br/>');		// 자바에서 웹프로젝트까지 열심히 하자! 화이팅
	document.writeln( msg +  '<hr/>');
	
	
	
	var  text = '♡해yo';
	document.writeln( text.length +  '<br/>');		// 한글도 1글자로 취급 // 4
	document.writeln( text.repeat(2) +  '<br/>');	// ♡해yo♡해yo
	document.writeln( text.codePointAt(0) +  '<br/>');	// 9825
	document.writeln( String.fromCodePoint(9825) +  '<br/>');
	
	document.writeln( String.fromCodePoint(9826) +  '<br/>');

	
	
	// 서로게이트 페어 (Surrogate Pair)
	// 유니코드는 2바이트를 한 글자로 표현해서 65535개의 문자를 표현하는데
	// 문자수를 확장하고자 일부 문자를 4바이트로 표현하여 2문자로 취급한다.
		
	
   </script>


</head>
<body>

</body>
</html>

 

 

* 형과 형 변환

<05_Number.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Number 형과 형변환 </title>
<script type="text/javascript">


// 1. 숫자 형식 메소드 
/* var su = 123.456789;
document.writeln( su.toExponential(2)  + "<br/>" );	// 10^n 지수형으로 출력
document.writeln( su.toFixed(3)  + "<br/>" );		// 소숫점아래 n자리까리 출력
document.writeln( su.toFixed(7) + "<br/>" );		// 소숫점 아래 n자리까지 출력
document.writeln( su.toPrecision(6)  + "<br/>" );	 // 전체자리수 n개만큼 출력
document.writeln( su.toPrecision(10)  + "<br/>" );	 // 전체자리수 n개만큼 출력 */

//-------------------------------------------------
// 2. 형변환

var n = '0770';
document.writeln( typeof n + "<br/>");				// string
document.writeln( Number(n) + "<br/>");				// 770
document.writeln( parseInt(n) + "<br/>");			// 770
document.writeln( parseFloat(n) + "<br/>");			// 770
document.writeln( typeof parseInt(n) + "<br/>");	// number

var n = 'abc0770';
document.writeln( Number(n) + "<br/>");		// 불가 (NaN, Not a Number)
document.writeln( parseInt(n) + "<br/>");	// 불가

var n = '0770abc';
document.writeln( Number(n) + "<br/>");		// 불가
document.writeln( parseInt(n) + "<br/>");	// 문자를 빼고 나머지에 한해서 숫자로 형변환 됨

document.writeln( 123 + "4");
document.writeln( 123 - "4");

document.writeln( typeof(123 + "4"));
document.writeln( typeof(123 - "4"));

</script>
</head>
<body>

</body>
</html>

 

 

* 배열의 함수

<06_Array.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Array 객체 </title>
<script type="text/javascript">		

// 1. 배열의 함수 확인

	var arr = ['김태희','송혜교','전지현','김고은','임수정'];
	document.writeln( arr + '<br/>');	// 김태희, 송혜교, 전지현, 김고은, 임수정
	document.writeln( arr.join('/') + '<br/>');	// 김태희/송혜교/전지현/김고은/임수정
	document.writeln( arr.slice(3) + '<br/>');	// 김고은,임수정
	document.writeln( arr.slice(2,3) + '<br/>');// 송혜교,전지현
	document.writeln( arr.reverse() + '<br/>');	// 임수정,김고은,전지현,송혜교,김태희
	document.writeln( arr.sort() + '<br/>');	// 김고은,김태희,송혜교,임수정,전지현
	document.writeln( arr + '<br/>');	// 김고은,김태희,송혜교,임수정,전지현
	
	document.writeln( arr.pop() + '<br/>');		// 전지현.. 스택과 관련 함수
	document.writeln( arr + '<br/>');
	document.writeln( arr.shift() + '<br/>');	// 김고은.. 큐와 관련된 함수
	document.writeln( arr + '<br/>');
	
// [주의] sort()

	var arr2 = [5, 15, 20, 9];
	document.writeln(arr2.sort() + '<br/>')		// 결과 : 15, 20, 5, 9 .. 문자처럼 정렬해버림
	
	// 2. 배열을 스택과 큐로 이용하기
	 	var data = [];
		data.push('박서준');
		data.push('현빈');
		data.push('박보검');
		document.writeln( data.pop() + "<br/>");	// 스택,박보검
		document.writeln( data.pop() + "<br/>");	// 현빈
		document.writeln( data.pop() + "<br/>");	// 박서준
		document.writeln( data.pop() + "<hr/>");	// undefined
		
		var data2 = [];
		data2.push('박소담');
		data2.push('김고은');
		data2.push('이지은');
		document.writeln( data2.shift() + "<br/>");	// 큐, 박소담
		document.writeln( data2.shift() + "<br/>");	// 김고은
		document.writeln( data2.shift() + "<br/>");	// 이지은
		document.writeln( data2.shift() + "<hr/>");	// undefined
			
	// 3. es6

	
	

	//-------------------------------------------- 나중에 함수부붙에서 하자
	// 4. 콜백함수
	// (1) forEach 메소드 :  배열의 내용을 순서대로 처리
	//			array.forEach(function(요소의값, 인덱스번호, 원래의배열){})

	
	// (2) map 메소드 : 배열을 지정된 규칙으로 가공하기

	
	
	// (3) some 메소드 : 배열에 조건이 일치하는 요소가 있는지 확인
	//     every 메소드 : 배열에 조건이 모든 요소에 일치하는지 확인
	/* 	var data3 = [1, 3, 5, 7, 9];
		var result = data3.some(function(value, index, array){
			return value%3===0;
		});
		if (result){
			document.writeln( " 3의 배수가 발견 <br/>");
		}else{
			document.writeln( " 3의 배수가 없음 <br/>");
		}
		var data3 = [3, 6, 9, 30];
		var result = data3.every(function(value, index, array){	
			return value%3===0;
		});
		if (result){
			document.writeln( " 모든 요소가 3의 배수 <br/>");
		}else{
			document.writeln( " 모든 요소는 3의 배수가 아님 <br/>");
		} */

	// (4) filter 메소드 : 배열의 내용을 특정의 조건으로 필터링


	
	
</script>

</head>
<body>

</body>
</html>

 

 

 

6. Date 객체

getFullYear() : 연도 출력

getMonth() : 월 출력

getDate() : 일 출력

getDay() : 요일 출력 (0~6)

 

setFullYear(2025) : 2025년으로 변경

setMonth(11) : 12월로 변경

setDate(25) : 25일로 변경

 

setDate(0) : 전 달의 마지막 날을 출력

 

<08_Date.html 전체 소스 코드>

더보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Date 객체</title>
<script type="text/javascript">	
 	
/* 	var d = new Date('2023/08/15');
	document.writeln( d  + '<br/>');
	document.writeln( d.getYear()  + '<br/>');		// 2자리만 출력하면서 1900년도가 넘어서 앞에 1이 붙음
	document.writeln( d.getFullYear()  + '<br/>');	// 따라서, 연도를 출력하려면 getFullYear 사용!
	document.writeln( d.getMonth()  + '<br/>');		// **** 0부터 카운트하므로 정상적으로 출력하려면 +1 해줘야 함
	document.writeln( d.getDate()  + '<br/>');
	document.writeln( d.getDay()  + '<br/>');		// 일:0, 월:1, 화:2...
 */

	var d = new Date();
	// 2025년 12월 25일로 변경
	d.setFullYear(2025);
	d.setMonth(11);
	d.setDate(25);
	document.writeln( d + '<br/>');
	document.writeln( d.toLocaleString() + '<br/>');
	document.writeln( d.toGMTString + '<br/>');
	document.writeln( d.toDateString + '<br/><hr/>');
	
	// 날짜형 계산
	document.writeln( d + '<br/>');
	d.setMonth( d.getMonth() +3 );
	document.writeln( d + '<br/><hr/>');
	
	// 현재 날짜에서 20일 후의 날짜 출력
	document.writeln( d + '<br/>');
	d.setDate ( d.getDate() + 20 );
	document.writeln( d + '<br/><hr/>');
	
	d.setDate(0);				// 전 달의 마지막날을 출력
	document.writeln( d + '<br/>')
	
	
	</script>

</head>
<body>

</body>
</html>

 

 


달력만들기

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 03_for연습.html </title>

<script type="text/javascript">

// 월에 대한 설정
// 몇 월을 알고 싶니? 0~11
var wall = 11;								// 12월의 정보를 알고자 함
var jinanDal = new Date();					// 지난달에 대한 정보를 가져올 Date객체
jinanDal.setMonth(wall);					// 11+1월로 설정 = 12월
jinanDal.setDate(0);						// 12월 0일로 설정
var lastday = jinanDal.getDay();			// 지난달의 마지막 요일

var wall2 = wall +1 ;
var ibunDal = new Date();					// 이번달에 대한 정보를 얻어올 Date객체
ibunDal.setMonth(wall2);					// 11+1+1월로 설정 = 1월
ibunDal.setDate(0);							// 1월 0일
var lastdate2 = ibunDal.getDate();			// 이번달의 마지막 날짜


//////////////////////////////////////////

// 테이블 시작
document.write(wall2 + '월 <br/>');
document.write('<table border="2">');
// 요일 출력 - 배열에 있는 요일 정보를 반복문을 이용하여 표 형태로 출력
var weekDay = new Array("일", "월", "화", "수", "목", "금", "토");
document.write( '<tr>' );
for (var i = 0; i <= 6; i++) 
	{ document.write('<td>' + weekDay[i] + '</td>'); }	
document.write( '</tr>' );

//날짜 출력
var column = 0;						// 7일 단위로 줄이 바뀌게 하기 위한 변수
document.write( '<tr>' );

// 이번달 1일 전에 들어갈 공백 수를 지난달의 요일로부터 받아옴
if (lastday == 6) {}
else if (lastday != 0) {
	for (var i = 0; i<= lastday; i++) {
	document.write('<td>' + '' + '</td>');
	column++;									// 공백의 수만큼 column증가
	}
}

// 해당월의 마지막날짜(lastdate2)까지 증가하는 만큼 칸마다 숫자 넣음
for (var i=1; i<=lastdate2; i++ ) {
	document.write('<td>' + i + '</td>');
	column++;
	if (column == 7) {				// 줄이 바뀌게 하려고
		document.write('</tr><tr>');
		column = 0;
	}
}

document.write( '</tr>' );
document.write('</table>');


</script>

</head>
<body>

</body>
</html>

 

 

 

반응형

'교육과정 > KOSMO' 카테고리의 다른 글

Day41  (0) 2020.11.27
Day40  (0) 2020.11.25
Day33  (0) 2020.11.16
Day32  (0) 2020.11.13
Day31  (0) 2020.11.12