과제 풀이

https://laker99.tistory.com/95?category=1065834 

- tr 태그를 <script> 바깥쪽에 써도 된다, <script> 바깥에 써서 연결시키고있다.


사용자 정의 함수

- 사용자가 필요에 따라 만들고 호출하여 사용하는 함수

 

사용자 정의 함수 생성

function 함수이름 (매개변수 1, 매개변수 2, ...) {
                       수행할 문장들...
}

- function 키워드를 사용한다.

- 매개변수가 필요한 경우에만 매개변수를 쓴다.

- 매개변수에 자료형을 쓸 필요없이 필요한 개수만큼 변수명만 , 로 이어주면 된다. ex) (a,b,c)

- 돌려줄 값이 있을때만 return 구문으로 값을 돌려주면 된다.

- 자바스크립트는 인터프리터 방식이므로 함수 정의시에는 가능한 한 헤드 태그에 정의하고, 바디 태그에서 호출한다.

 

함수 호출 방법 2가지

1. 함수 이름을 통한 호출

2. 이벤트를 통한 호출

 

사용자 정의 함수 예제1

- 매개변수가 없는 함수

- 사용자 정의 함수 생성과 호출

- 함수 이름을 통한 호출과 이벤트를 통한 호출

- function01.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사용자 정의 함수</title>
<script>
	// 사용자 정의 함수
	function check() {
		alert("함수 호출 성공");
	}
</script>
</head>
<body>

<!-- 방법1. 함수호출 -->
<script>
	check();		// 함수 호출
//	CHECK();		//함수명은 대,소문자를 구분한다.
</script>

<!-- 방법2. 이벤트를 이용해서 함수 호출 -->
<input type="button" value="함수호출" onClick="check()">

</body>
</html>

- 방법1에서 check() 함수는 매개변수가 없으므로 이름만으로 호출한다

- 방법2에서 onClick 이벤트 핸들러를 통해 함수를 호출한다.

- 클릭이벤트 발생시키기 위해 onClick="호출할 함수명" 을 적는다.

+ 변수명/함수명 대소문자를 구분한다.

+ 이벤트 핸들러 등록하는방법 중 태그에 속성으로 적는 방법이다.

+ onClick 은 이벤트 핸들러이다, 이벤트 핸들러는 대소문자를 구분하지 않는다.

방법1
방법2

 

+ 만약 함수 선언, 정의가 호출보다 아래쪽에 있다면?

- 오류 발생, 자바스크립트는 인터프리트 언어이므로 함수 선언,정의가 호출보다 위에있어야한다.

 

이벤트

- 그래픽 프로그램 만들때 이벤트를 주로 사용한다.

- 언어마다 같은 행위여도 이벤트 이름이 다르다.

ex) 자바에선 버튼 클릭시 action 이벤트, 자바스크립트는 click 이벤트가 발생한다.

 

자바스크립트 이벤트 종류

- Click 이벤트 : 버튼을 클릭, 전송기능이 없는 버튼을 클릭하면 click 이벤트가 발생한다.
- Submit 이벤트 : submit버튼을 클릭할때, 즉 전송기능이 있는 버튼을 클릭하면 submit 이벤트가 발생한다.
- MouseOver 이벤트 : 컴포넌트(그림)위에 마우스 포인터를 올렸을때
- MouseOut 이벤트 : 컴포넌트(그림)위에서 마우스 포인터가  벗어났을때
- Load 이벤트 :  현재 문서가 웹브라우저에 불려질때 
- Unload 이벤트 : 웹브라우저가 해당 문서를 벗어났을때
- Focus 이벤트 : 입력양식 필드로 포커스가 들어왔을 때, 즉 깜빡거릴때

- Blur 이벤트 : 입력양식에서 포커스가 벗어났을때, Focus 이벤트와 반대

- Keydown 이벤트 : 키를 누르고 있을때, 눌렀을때
- Keyup 이벤트 : 키를 눌렀다가 놓았을때, Keydown 이벤트와 반대
- Change 이벤트 : 값의 변화가 발생할때, 주로 select 옵션 메뉴중 선택을 하면 값이 변화함

 

이벤트 처리순서
1. 각 컴퍼넌트에 발생한 이벤트 종류를 파악

ex) Click, Focus, Blur, Load, MouseOver, MouseOut
* 컴퍼넌트 : select 박스 또는 input=text 입력양식 같은 것들


2. 각 이벤트명에다 on을 붙여서 이벤트 핸들러를 생성
ex) onClick,  onFocus, onBlur, onLoad... 는 이벤트 핸들러

- 대소문자를 구분하지 않지만 카멜 표기법처럼 on은 소문자, 이벤트명 첫글자는 대문자로 주로 작성

 

3. 이벤트 핸들러를 이용해서 함수를 호출한다.
ex)

<input type=button value="회원가입" onClick="check()">

- 이벤트 핸들러 = "호출할 함수" 형식

 

사용자 정의 함수 예제2

- 매개변수를 가진 함수

- function02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사용자 정의 함수</title>
<script>
	// 매개변수가 있는 함수 정의
	function ask(question) {
		var result = confirm(question);
		if(result) {	// '확인' 버튼 클릭시
			return "찬성";
		} else{			// '취소' 버튼 클릭시
			return "반대";
		}
	}
</script>
</head>
<body>
<script>
	var result = ask("찬성하면 확인버튼, 반대하면 취소버튼을 클릭");	// 함수 호출
	alert(result);
</script>
</body>
</html>

- 함수 정의는 주로 <head> 태그 내에 하고, 함수 호출은 주로 <body> 태그 내에서 한다.

<head> 안

- 자바스크립트에서는 매개변수를 만들때도 자료형을 쓰지 않고 이름만 써도 된다.

- question 매개변수로 넘겨진 값이 confirm 창에 뜬다. (ex) "정말 삭제하시겠습니까?")

- confirm 창에서 확인을 누르면 true가, 취소를 누르면 false 가 result에 저장된다.

- true인경우 return 구문을 통해 "찬성" 이라는 문자데이터를 돌려주고있다.

<body> 안

- ask() 함수는 매개변수가 있으므로 값을 전달하면서 호출하고 있다.

- result 변수에 ask() 가 돌려준 값 ("찬성" or "반대") 가 저장된다.

- confirm 창이 뜨면서, 함수호출시 매개변수로 넘겨줬던 값이 출력되고 있다.

확인 버튼 누른경우
취소 버튼 누른경우

- 함수호출 후 돌려받은 값을 <body> 안에서 alert()로 출력하고 있다.

 

사용자 정의 함수 예제3

- 매개변수가 2개 이상인 함수

- function03.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사용자 정의 함수</title>
<script>
	// 최대값과 최소값을 구하는 함수
	function max(a,b) {		// 최대값 구해주는 함수
		if(a > b)
			return a;
		else
			return b;
	}
	
	function min(a,b) {		// 최소값 구해주는 함수
		if(a < b)
			return a;
		else
			return b;
	}
</script>
</head>
<body>
<script>
	a = prompt("정수1 을 입력하세요","");
	b = prompt("정수2 를 입력하세요","");
	
	var max = max(a, b);	// max() 함수 호출
	var min = min(a, b);	// min() 함수 호출
	document.write("max = " + max + "<br>");
	document.write("min = " + min + "<br>");
</script>
</body>
</html>

- 키보드로 입력한 2개의 값을 함수의 매개변수로 전달하여 return 을 통해 최대값과 최소값을 돌려받는다.

+ if문이나 for문에 들어갈 코드가 1줄이면 괄호 {} 를 하지 않아도 된다.

 

사용자 정의 함수 예제4

- 버튼 4개를 만들어서 사용자가 키보드로 입력한 정수값 2개의 +, - , * ,/ 를 구하기

- onClick 이벤트 핸들러를 이용하여 함수 호출

- function04.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사용자 정의 함수</title>
<script>
	// Number("50") --> 50
	var n1 = Number(prompt("정수1 을 입력하세요",""));
	var n2 = Number(prompt("정수2 를 입력하세요",""));
	
	function plus() {
		alert(n1 + n2);
	}
	function minus() {
		alert(n1 - n2);
	}
	function mul() {
		alert(n1 * n2);
	}
	function div() {
		alert(n1 / n2);
	}
</script>
</head>
<body>
<form>
	<input type="button" value="더하기" onClick="plus()">
	<input type="button" value="빼기" onClick="minus()">
	<input type="button" value="곱하기" onClick="mul()">
	<input type="button" value="나누기" onClick="div()">
</form>
</body>
</html>

- <body> 태그 안에 입력양식을 만든다

- 전송기능이 없는 버튼이므로 클릭시 Click 이벤트 발생한다.

- onClick 이벤트 핸들러를 통해 함수를 호출한다.

- Number() 가 없다면 산술연산 중 + 기능은 연산이 되지 않고 1020으로 문자연결되어 나온다, 형변환이 필요하다.

Number() 를 쓰지 않았을때

- 입력한 값들이 모두 문자로 처리되어 n1 + n2 일때 연산이 되지 않고 연결이 되는것이다.

- Number() 함수로 prompt() 전체를 감싸주면 숫자로 형변환된다.

- 각 버튼 클릭시 두 정수값을 더하기, 빼기, 곱하기, 나누기 한 값이 alert 메세지 박스에 출력된다.

 

사용자 정의 함수 예제5

- 재귀함수 : 함수 안에서 자기 자신을 호출하는 함수

- 재귀함수는 Factorial 을 구할때 많이 쓴다, 메모리를 많이 사용한다.

- function05.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사용자 정의 함수</title>
<script>
	// 재귀함수 : 함수안에서 자기 자신의 함수를 호출하는 함수
	function factorial (n) {
		if(n > 1) {
			var result = n * factorial(n-1); // n1 = n * f(n-1) * f(n-2)...1
									 		 // 3! = 3 * (3-1) * (3-2) ...1
			return result;
		} else { // n=1, 즉 f(1) 일때
			return n;
		}
	}
</script>
</head>
<body>
<script>
	var n = prompt("팩토리얼을 구할 정수를 입력하세요");
	document.write(n + "! = " + factorial(n));
</script>
</body>
</html>

- 자바스크립트는 자바와 달리 자료형을 쓰지 않기떄문에 숫자 범위가 한정되어있지 않아, 큰 팩토리얼도 구할 수 있다

 

 

한계

- 자바와 달리 자료형을 쓰지 않기 때문에 자료형의 값의 범위에 구애받지 않아 큰 수의 팩토리얼도 구할 수 있지만 어느 순간을 넘어가면 Infinity, 구해주지 않는다.

 

+ 나중에 자바스크립트 계산기 프로그램 만들 것


Date 객체

- 날짜 정보 처리

- 현재 년,월,일,시,분,초,요일 등을 구할 수 있다.

- 자바의 Date 클래스 객체 같은 역할

- new 연산자로 Date 객체를 생성해야한다.

today = new Date();

- 연도를 구할때는 메소드를 사용해야한다.

today.getFullYear();

 

Date 객체 예제1

- 현재 년,월,일,시,분,초,요일 구하기

- date01.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Date 객체</title>
</head>
<body>
<script>
	// 현재 년,월,일,시,분,초 요일
	var t = new Date();
	
	var y = t.getFullYear();	// 년
	var m = t.getMonth() + 1;	// 월 (0~11)
	var d = t.getDate();		// 일
	
	var h = t.getHours();		// 시간
	var mm = t.getMinutes();	// 분
	var s = t.getSeconds();		// 시
	var w = t.getDay();			// 요일(0~6)
	
	var week = ['일','월','화','수','목','금','토'];
	
	document.write(y + "-" + m + "-" + d + " " + h + ":" + mm + ":" + s + " ");
//	document.write(w);	// w=5 : 금
	document.write(week[w] + "요일");
</script>
</body>
</html>

- Date 객체는 내장 객체 형태로 제공되지 않기떄문에 직접 객체를 만들어서 사용해야한다. (date01.html 부분)

var t = new Date();

- getYear() 이 아닌 getFullYear() 임을 주의

- getMonth() 로 월을 구할때는 월을 0 ~ 11 까지 구해주기때문에 + 1을 해서 조정해야한다.

- getDay() 로 요일을 구하는데, 요일을 0~6까지 구해준다, 문자형태로 변환시켜야함 (date01.html 부분)

	document.write(w);	// w=5 : 금

- 오늘 기준 금요일 5로 나온다

- 문자형태로 변환하기 위해 배열을 만들기 (date01.html 부분)

- 0 부터 시작이므로 -1 을 하지 않아도 된다.

+ 자바는 요일을 1~7까지 구해준다

+ Date, getFullYear() 대소문자를 구분 

date01.html 출력

- 호출되었던 시점의 시간 1개를 출력하고 있다

 

Date 객체 예제2

- 1초에 한번씩 계속해서 현재 년,월,일,시,분,초를 호출하기

- 함수를 1초에 한번씩 호출하면 경과된 초를 계속해서 출력 가능

- 함수안에서 자신을 호출하는 함수 사용

- 돌아가는 함수를 멈추게 하기 위한 함수도 필요

- date02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Date 객체</title>
<script>
	function show() {
		var t = new Date();
		
		var y = t.getFullYear();
		var m = t.getMonth() + 1;
		var d = t.getDate();
		var h = t.getHours();
		var mm = t.getMinutes();
		var s = t.getSeconds();
		
		document.write(y + "-" + m + "-" + d + " " + h + ":" + mm + ":" + s + "<br>");
		
		// 브라우저 상태 표시줄에 출력
		window.status = y + "-" + m + "-" + d + " " + h + ":" + mm + ":" + s;
		
		// setTimeout(명령, 시간(1/1000)); 지정된 시간이 경과된 다음에 명령을 실행
		w = setTimeout("show()", 1000);	// 1초에 한번씩 show() 함수 호출
	}
	function stop() {
		// setTimeout()으로 실행된 명령을 해제
		ClearTimeout(w);
	}
</script>
</head>
<!-- <body onLoad="show()"> -->
<body>
	<input type="button" value="start" onClick="show()">
	<input type="button" value="stop" onClick="stop()">
	<br><br>
	
	<img src="img/clock.jpg" onMouseOver="show()" onMouseOut="stop()">
</body>
</html>

<head>

- show() 함수안에서 자기 자신인 show() 함수를 재귀함수 형태로 1초에 한번씩 호출하고 있다.

- 최초로 show()를 한번 호출시 재귀함수를 통해 계속 1초에 1번씩 자신을 호출하게 됨.

- 위의 코드가 잘 실행되지 않기떄문에 브라우저 상태 표시줄에 출력하기위해 window.status 사용

- stop() 함수에서 시간을 멈추기 위해, setTimeout 으로 계속 실행되는 함수를 멈춰주기 위해 ClearTimeout() 사용

 

<body>

- input 태그로 start 와 stop 버튼을 만들어 onClick 이벤트 핸들러 사용

- 이미지를 불러와서 MouseOver, MouseOut 이벤트를 이용하고 있다.

- 마우스 포인터를 올리면 MouseOver이벤트, 벗어나면 MouseOut 이벤트 발생

- start 버튼을 클릭하거나, 이미지 위에 마우스 포인터를 올리면 실행된다

- 1초에 한번씩 출력하고 있다.

 

지정된 시간 뒤에 명령 수행하는 방법

		// setTimeout(명령, 시간(1/1000)); 지정된 시간이 경과된 다음에 명령을 실행
		w = setTimeout("show()", 1000);	// 1초에 한번씩 show() 함수 호출

- setTimeout() 함수 : 정해진 일정시간 뒤에 어떤 명령(코드) 를 실행

- window 객체에서 지원되는 함수 중 하나이다.

 

setTimeout() 으로 실행된 명령 해제하는 방법

 

		// setTimeout()으로 실행된 명령을 해제
		ClearTimeout(w);

- ClearTimeout() 함수 : setTimeout() 으로 실행된 명령을 해제

- 매개변수에는 setTimeout 의 리턴을 받은 w를 넣는다.

- 한번의 setTimeout()을 해제하면 더이상 show()를 호출하는 것을 막게됨

- window 객체에서 지원되는 함수 중 하나이다.

 

브라우저 상태 표시줄에 출력

- status() 함수 : 브라우저 상태 표시줄에 출력

- window 객체에서 지원되는 함수 중 하나이다.

- 브라우저 맨 하단의 영역이 브라우저 상태 표시줄이다.

- 대부분 브라우저는 감춰져 있어 보이지 않는다.

- I.E 에서 확인 가능

- start 를 누르면 아래 부분 상태표시줄에 뜨고, stop 을 누르면 멈춘다.

 

Load 이벤트

- 현재 문서가 웹 브라우저에 불려질때 발생함

- <body> 태그 안에 써야한다.

<body onLoad="show()"></body>

+ body 태그 안에 onLoad="show()" 를 하면 실행 하자마자, 즉 현재 문서가 브라우저에 로딩되자마자 실행된다.


배열

자바스크립트 배열 정의/생성 방법 3가지

1.

   str=new Array();
   str[0]=80;
   str[1]=90;
   str[2]=70;

 

- 값이 정해지지 않았을때 사용함

- 자바와 달리 배열 공간 개수를 지정하지 않는다.


2.

  str=new Array(80,90,70);

-  Array 객체를 이용하여 배열 생성
3.

  str=[80,90,70];

- 가장 간단하며 가장 많이 사용된다.

 

배열 속성, 메소드

- 배열에서 지원되는 여러 속성들이 있다.

ex) length 속성으로 배열 크기 구함

- 배열에서 지원되는 여러 메소드들이 있다.

ex) pop(), sort(), slice() 등

 

배열 예제1

- 3가지 형식으로 배열 정의

- array01.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>배열</title>
</head>
<body>
<script>
	// 배열
	
	// 방법1.
	var a1 = new Array();
	a1[0] = 80;
	a1[1] = 90;
	a1[2] = 70;
	
	// length : 배열의 크기를 구해주는 속성
	for(var i = 0; i < a1.length; i++) {
		document.write(a1[i] + "\t");
	}
	document.write("<br>");
	
	// 방법2.
	var a2 = new Array(80, 90, 70);
	
	for(var i = 0; i < a2.length; i++){
		document.write(a2[i] + "\t");
	}
	document.write("<br>");
	
	// 방법3.
	var a3 = [80, 90, 70];

	for(var i = 0; i < a3.length; i++){
		document.write(a3[i] + "\t");
	}
	
</script>
</body>
</html>

<방법1>

- Array 객체를 통해 배열을 생성하고 있다.

- Array 객체는 new를 이용하여 직접 만들어야한다.

- 0번, 1번, 2번 원소를 반복문을 통해 출력해주고 있다.

- length 속성으로 배열의 크기를 구한다. ex) a1.length 는 3

+ 속성은 괄호가 없다

<방법2>

- Array 객체를 통한 배열 선언과 동시에 값을 할당했다.

- 0번방에 80, 1번방에 90, 2번방에 70이 들어갔다.

<방법3>

- 대괄호 [ ] 안에 원소값을 넣어주면 된다.

 

+ 배열은 동일한 자료형의 데이터만 저장되는데 동일하지 않은 데이터를 넣으면?

	var a3 = [80, 90, 70, 3.14];

	for(var i = 0; i < a3.length; i++){
		document.write(a3[i] + "\t");
	}

- 자바스크립트에서는 배열에 서로 다른 자료형의 자료형도 저장되고 있다!

 

배열의 메소드

- 배열에서 지원되는 여러 메소드들이 있다.

ex) pop(), sort(), slice() 등

 

배열 예제2

배열의 메소드 예제 1

- array02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>배열</title>
</head>
<body>
<script>
	var num = ['사당','교대','방배','강남'];
	document.write(num + "<br>");			//사당,교대,방배,강남
	document.write(typeof(num) + "<br>");
	
	// join() : 문자('-')를 기준으로 배열 값들을 하나의 문자 데이터로 결합
	document.write(num.join('-') + "<br>");	//사당-교대-방배-강남
	document.write(typeof(num.join('-')) + "<br>");
	
	// reverse() : 배열 원소값들의 순서를 반대로 바꾸어 주는 역할.
	document.write(num.reverse() + "<br>");	//강남,방배,교대,사당
	document.write(typeof(num.reverse()) + "<br>");
	document.write(num + "<br>")			//사당,교대,방배,강남
	
	// sort() : 배열 원소 값들을 오름차순으로 정렬 (문자 : 사전순 정렬)
	//			sort() 함수로 오름차순으로 정렬이 되면 원본 배열이 바뀌게 된다.
	document.write(num.sort() + "<br>");	//강남,교대,방배,사당
	document.write(num + "<br>");			//강남,교대,방배,사당
	
	// 배열 원소 값들을 내림차순 정렬시켜보자 (문자 : 사전역순 정렬)
	document.write(num.sort().reverse() + "<br>");	//사당,방배,교대,강남
	document.write(num.sort().reverse() + "<br>");	//사당,방배,교대,강남
	
</script>
</body>
</html>

배열 출력 (array02.html 부분)

	var num = ['사당','교대','방배','강남'];
	document.write(num + "<br>");			//사당,교대,방배,강남
	document.write(typeof(num) + "<br>");

- 배열 이름을 출력시 배열 원소가 전부 출력된다.

- 출력시엔 문자처럼 결합이 되어서 출력된다.

- 배열자체를 typeof() 로 출력하면 배열 객체이므로 object 형이다.

배열 원소들을 문자데이터로 결합 (array02.html 부분)

	// join() : 문자('-')를 기준으로 배열 값들을 하나의 문자 데이터로 결합
	document.write(num.join('-') + "<br>");	//사당-교대-방배-강남
	document.write(typeof(num.join('-')) + "<br>");

- 배열의 join() 함수를 사용해서 특정 문자를 기준으로 배열값들을 하나의 문자 데이터로 결합

- 또한 num.join('-') 의 자료형은 string 이다, 즉 join() 을 쓰면 문자데이터가 된다.

- 원본 배열에 영향을 주지 않는다.

배열 원소값 순서 바꾸기 (array02.html 부분)

	// reverse() : 배열 원소값들의 순서를 반대로 바꾸어 주는 역할.
	document.write(num.reverse() + "<br>");	//강남,방배,교대,사당
	document.write(typeof(num.reverse()) + "<br>");
	document.write(num + "<br>")			//사당,교대,방배,강남

- reverse() 함수를 사용하여 배열 원소갑슫ㄹ의 순서를 거꾸로 바꾼다.

- 배열 객체라는 의미로 object 가 출력됨

- 원본 배열에 영향을 주지 않는다.

 

배열 정렬 (오름차순) (array02.html 부분)

	// sort() : 배열 원소 값들을 오름차순으로 정렬 (문자 : 사전순 정렬)
	//			sort() 함수로 오름차순으로 정렬이 되면 원본 배열이 바뀌게 된다.
	document.write(num.sort() + "<br>");	//강남,교대,방배,사당
	document.write(num + "<br>");			//강남,교대,방배,사당

- sort() : 배열 원소 값들을 오름차순으로 정렬 (사전순)

- reverse() 와 달리 sort() 함수는 원본 자체가 바뀐다!

- 즉 원본 num 배열이 바뀌었으므로(정렬되었으므로) num.reverse() 아니라 그냥 num() 으로 출력해도 같다.

- 오름차순 정렬되어 강남 부터 나온다.

+ 내림차순 함수는 없다, 내림차순을 하고싶으면 sort()로 오름차순 정렬 후, reverse() 로 순서 바꿔주기

배열 정렬 (내림차순) (array02.html 부분)

	// 배열 원소 값들을 내림차순 정렬시켜보자 (문자 : 사전역순 정렬)
	document.write(num.sort().reverse() + "<br>");
	document.write(num.sort().reverse() + "<br>");

배열 예제3

배열의 메소드 예제 2

- 또다른 배열의 함수들

- 배열을 조작할때 사용하는 함수들

- array03.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>배열</title>
</head>
<body>
<script>
	var greenLine = ['사당','교대','방배','강남'];
	var yellowLine = ['미금','정자','모란','수서'];
	
	// slice(start index, end index) : start ~ end-1 번 원소를 추출
	document.write(greenLine.slice(1, 3) + "<br>");	//교대,방배
	
	// concat() : 2개의 배열 객체를 하나로 결합
	//사당,교대,방배,강남,미금,정자,모란,수서
	document.write(greenLine.concat(yellowLine) + "<br>");
	
	// pop() : 배열 데이터 중에서 마지막 인덱스에 저장된 데이터를 삭제
	greenLine.pop();	//'강남' 삭제
	document.write(greenLine + "<br>");	// 사당,교대,방배
	
	// push() : 배열 객체에 마지막 인덱스에 새로운 데이터를 삽입
	greenLine.push('삼성');	//'삼성' 삽입
	document.write(greenLine + "<br>");	// 사당,교대,방배,삼성
	
	// shift() : 배열 데이터 중에서 첫번째 데이터를 삭제
	greenLine.shift();		//'사당' 삭제
	document.write(greenLine + "<br>");	// 교대,방배,삼성
	
	// unsift() : 배열 첫번째 인덱스에 새로운 데이터를 삽입
	greenLine.unshift('신도림');	//'신도림' 삽입
	document.write(greenLine + "<br>");	// 신도림,교대,방배,삼성
	
	
</script>
</body>
</html>

배열 자르기(추출) (array03.html 부분)

	// slice(start index, end index) : start ~ end-1 번 원소를 추출
	document.write(greenLine.slice(1, 3) + "<br>");	//교대,방배

- slice(start index, end index) : start ~ end-1 번 원소를 추출

- 범위를 지정해서 배열을 자른다.

배열 결합 (array03.html 부분)

	// concat() : 2개의 배열 객체를 하나로 결합
	//사당,교대,방배,강남,미금,정자,모란,수서
	document.write(greenLine.concat(yellowLine) + "<br>");

- concat() : 2개의 배열을 하나의 배열로 결합시켜줌

- greenLine 이 먼저왔기떄문에 greeLine의 원소들이 먼저 출력되고 이어서 yellowLine 의 원소들이 온다.

배열 마지막 인덱스 데이터 삭제 (array03.html 부분)

	// pop() : 배열 데이터 중에서 마지막 인덱스에 저장된 데이터를 삭제
	greenLine.pop();	//'강남' 삭제
	document.write(greenLine + "<br>");	// 사당,교대,방배

- pop() : 배열 데이터 중에서 마지막 인덱스에 저장된 데이터를 삭제

- greenLine 에서 가장 마지막 인덱스의 원소인 '강남' 이 삭제됨

- 원본 배열에 영향

배열 마지막 인덱스에 데이터 삽입 (array03.html 부분)

	// push() : 배열 객체에 마지막 인덱스에 새로운 데이터를 삽입
	greenLine.push('삼성');	//'삼성' 삽입
	document.write(greenLine + "<br>");	// 사당,교대,방배,삼성

- push() : 배열 객체의 마지막 인덱스에 새로운 데이터 삽입

- greenLine 의 가장 마지막 인덱스에 새로운 원소인 '삼성'이 삽입됨

- 원본 배열에 영향

배열 첫번째 인덱스 데이터 삭제  (array03.html 부분)

	// shift() : 배열 데이터 중에서 첫번째 데이터를 삭제
	greenLine.shift();		//'사당' 삭제
	document.write(greenLine + "<br>");	// 교대,방배,삼성

- shift() 로 배열의 첫번째 데이터를 삭제한다.

- pop() 과 반대

- 원본 배열에 영향

배열 첫번째 인덱스에 데이터 삽입 (array03.html 부분)

	// unsift() : 배열 첫번째 인덱스에 새로운 데이터를 삽입
	greenLine.unshift('신도림');	//'신도림' 삽입
	document.write(greenLine + "<br>");	// 신도림,교대,방배,삼성

- unshift() 로 배열 첫번째 인덱스에 데이터를 삽입

- push() 와 반대

- 원본 배열에 영향


String 객체

 

String 객체 생성 방법

1. new로 할당

2. 문자열을 바로 넣어서 생성

 

String 객체 속성

- length : 문자열의 길이를 구해줌

+ 자바에선 length() 메소드를 사용했었음, 자바스크립트에서는 length 속성이다.

 

String 객체 함수

- substring(), substr(), slice(), concat() 등

 

String 객체 예제 1

String 객체 생성, 출력, length 속성

- string01.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>String 객체</title>
</head>
<body>
<script>
	var str1 = '자바스크립트';
	var str2 = "자바스크립트";
	var str3 = new String('javascript');
	var str4 = new String("javascript");
	
	document.write("str1 = " + str1 + "<br>");
	document.write("str2 = " + str2 + "<br>");
	document.write("str3 = " + str3 + "<br>");
	document.write("str4 = " + str4 + "<br>");
	
	// length 속성 : 문자열의 길이를 구해주는 속성
	document.write("문자열의 길이 : " + str1.length + "<br>");	//6
	document.write("문자열의 길이 : " + str2.length + "<br>");	//6
	document.write("문자열의 길이 : " + str3.length + "<br>");	//10
	document.write("문자열의 길이 : " + str4.length + "<br>");	//10
	
</script>
</body>
</html>

 

String 객체 생성 (string01.html 부분)

	var str1 = '자바스크립트';
	var str2 = "자바스크립트";
	var str3 = new String('javascript');
	var str4 = new String("javascript");

- 크게 2가지 방법으로 String 객체를 생성할 수 있다.

 

String 객체 출력 (string01.html 부분)

	document.write("str1 = " + str1 + "<br>");
	document.write("str2 = " + str2 + "<br>");
	document.write("str3 = " + str3 + "<br>");
	document.write("str4 = " + str4 + "<br>");

 

문자열 길이 구하기 (string01.html 부분)

	// length 속성 : 문자열의 길이를 구해주는 속성
	document.write("문자열의 길이 : " + str1.length + "<br>");	//6
	document.write("문자열의 길이 : " + str2.length + "<br>");	//6
	document.write("문자열의 길이 : " + str3.length + "<br>");	//10
	document.write("문자열의 길이 : " + str4.length + "<br>");	//10

- String 객체의 length "속성"으로 문자열의 길이를 구함

- 한글, 영문 상관없이 글자수를 구함

+ 자바에서는 문자열의 길이를 length() "메소드"로 구한다.

 

String 객체 예제 2

String 문자열 관련 함수

- 문자열 추출 관련 함수가 substring() 외에 substr() 과 slice() 메소드 등 많은 함수가 있다

- 자바의 String 클래스의 메소드들과 유사

+ 자바는 substring() 만 지원

- string02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>String 객체</title>
</head>
<body>
<script>
	var t = "Hello Thank you good luck to you";
	
	// charAt(16) : 인덱스 16번 문자를 추출
	document.write(t.charAt(16) + "<br>");	//g

	
	// indexOf('you') : 가장 먼저 나오는 'you'의 인덱스 번호를 구해준다.
	document.write(t.indexOf('you') + '<br>');	//12
	
	// indexOf('you', 16)
	// : 인덱스 16번 이후에 가장 먼저 나오는 'you'의 인덱스 번호를 구해준다.
	document.write(t.indexOf('you', 16) + '<br>');	//29
	
	// lastIndexOf('you')
	// : 끝에서 가장 먼저 나오는 'you'의 인덱스 번호를 구해준다.
	document.write(t.lastIndexOf('you') + "<br>");	//29
	
	// match('luck') : 가장 먼저 나오는 'luck'과 일치가 되는 문자를 반환
	document.write(t.match('luck') + "<br>");	//luck
	
	// toUpperCase() : 대문자로 변환
	// HELLO THANK YOU GOOD LUCK TO YOU
	document.write(t.toUpperCase() + "<br>");
	
	// toLowerCase() : 대문자로 변환
	// hello thank you good luck to you
	document.write(t.toLowerCase() + "<br>");
	
	// substring(start index, end index)
	// : start 인덱스부터 end-1 번 인덱스 번호의 문자를 추출
	// substring(6, 12) : 인덱스 6번부터 11번 까지의 문자를 추출
	document.write(t.substring(6, 12) + "<br>");	//Thank
	
	// substr(start index, 추출할 문자열 갯수)
	// substr(21, 4) : 인덱스 21번부터 4개의 문자를 추출
	document.write(t.substr(21, 4) + "<br>");	//luck
	
	// split("구분기호")
	// : 구분기호를 이용해서 문자를 분리해서 배열로 리턴해주는 함수
	// split(" ") : 공백문자를 기준으로 문자를 분리해서 배열로 리턴해준다.
	var s = t.split(" ");
	document.write(s[0] + "<br>");
	document.write(s[1] + "<br>");
	document.write(s[2] + "<br>");
	document.write(s[3] + "<br>");
	document.write(s[4] + "<br>");
	document.write(s[5] + "<br>");
	document.write(s[6] + "<br>");
	
	for(var i = 0; i < s.length; i++) {
		document.write(s[i] + "\t");
	}
	
</script>
</body>
</html>

 

 

특정 인덱스의 문자 추출 (string02.html 부분)

	// charAt(16) : 인덱스 16번 문자를 추출
	document.write(t.charAt(16));	//g

- charAt() 함수로 특정 인덱스의 문자를 추출

- 문자열 인덱스는 0 번부터 시작

특정 문자, 문자열의 인덱스 구하기 (string02.html 부분)

	// indexOf('you') : 가장 먼저 나오는 'you'의 인덱스 번호를 구해준다.
	document.write(t.indexOf('you') + '<br>');	//12

- indexOf('특정 문자 또는 문자열') 함수를 사용해서 가장 먼저 나오는 그 문자 또는 문자열의 인덱스 번호를 구해준다.

특정 인덱스 이후의 특정 문자,문자열의 인덱스 구하기 (string02.html 부분)

	// indexOf('you', 16) 
	// : 인덱스 16번 이후에 가장 먼저 나오는 'you'의 인덱스 번호를 구해준다.
	document.write(t.indexOf('you', 16) + '<br>');	//29

- indexOf('특정 문자 또는 문자열', '특정 인덱스') 함수를 사용해서 특정 인덱스 이후에 가장 먼저 나오는 그 문자 또는 문자열의 인덱스 번호를 구해준다.

끝에서부터 특정 문자,문자열의 인덱스 번호 구하기 (string02.html 부분)

	// lastIndexOf('you')
	// : 끝에서 가장 먼저 나오는 'you'의 인덱스 번호를 구해준다.
	document.write(t.lastIndexOf('you') + "<br>");	//29

- lastIndexOf('특정 문자 또는 문자열') 함수를 사용해서 문자열 끝에서부터 가장 먼저 나오는 특정 문자, 문자열의 인덱스를 구해준다.

특정 문자열과 일치가 되는 문자열 구하기 (string02.html 부분)

	// match('luck') : 가장 먼저 나오는 'luck'과 일치가 되는 문자를 반환
	document.write(t.match('luck') + "<br>");	//luck

- match() 함수는 문자열에서 정규식을 검색하여 성공 여부를 반환한다.

- 찾고자하는 문자열을 매개변수로 넣는다, luck 과 일치되는 값이 luck 이므로 luck을 출력함

+ 찾고자 하는 값이 없으면?

 

문자열을 대문자로 변환 (string02.html 부분)

	// toUpperCase() : 대문자로 변환
	// HELLO THANK YOU GOOD LUCK TO YOU
	document.write(t.toUpperCase() + "<br>");

- toUpperCase() : 문자열을 대문자로 변환해줌

 

문자열을 소문자로 변환 (string02.html 부분)

	// toLowerCase() : 대문자로 변환
	// hello thank you good luck to you
	document.write(t.toLowerCase() + "<br>");

- toLowerCase() : 문자열을 소문자로 변환해줌

 

문자열 추출 관련 메소드

- substring(시작인덱스, 끝 인덱스)

- substr(인덱스, 길이)

- 두가지가 기능은 비슷하지만 형식은 다르다

- 자바는 substring() 만 지원되지만 자바스크립트에서는 substring(), substr() 다 지원된다.

 

substring() 과 substr() 차이

- substring(strat index) 처럼 매개변수가 1개 오면 start index가 됨, 끝까지 추출

- substring(start index, end index) 처럼 매개변수가 2개 오면 start index 와 end index 가 되고, start 부터 end-1 까지 출력

- substr(start index) 처럼 매개변수 1개 오면 start index 가 됨, 끝까지 추출

- substr(start index, 추출한 문자열 갯수) 처럼 매개변수 2개 오면 start index와 추출할 문자열 개수가 되고 start 부터 문자열 개수만큼 추출

+ 즉 매개변수가 1개일때는 두 함수의 기능이 동일하다.

 

문자열 추출 함수1 (string02.html 부분)

	// substring(start index, end index)
	// : start 인덱스부터 end-1 번 인덱스 번호의 문자를 추출
	// substring(6, 12) : 인덱스 6번부터 11번 까지의 문자를 추출
	document.write(t.substring(6, 12) + "<br>");	//Thank

- sutstring(start index, end index) 함수로 인덱스를 이용해서 특정 문자열을 추출한다.

- 인덱스 6은 T, 인덱스 11은 k 이므로 Thank 가 출력된다

- 인덱스 start 의 문자부터 인덱스 end-1 의 문자까지 출력한다.

 

문자열 추출 함수2 (string02.html 부분)

	// substr(start index, 추출할 문자열 갯수)
	// substr(21, 4) : 인덱스 21번부터 4개의 문자를 추출
	document.write(t.substr(21, 4) + "<br>");	//luck

- substr(start index, 추출할 문자열 갯수) 함수로 인덱스와 갯수를 이용해서 특정 문자열을 추출한다.

- 추출할 문자열의 개수가 두번쨰 매변수에 들어감

 

구분기호로 문자열 자르기 함수 (string02.html 부분)

	// split("구분기호")
	// : 구분기호를 이용해서 문자를 분리해서 배열로 리턴해주는 함수
	// split(" ") : 공백문자를 기준으로 문자를 분리해서 배열로 리턴해준다.
	var s = t.split(" ");
	document.write(s[0] + "<br>");
	document.write(s[1] + "<br>");
	document.write(s[2] + "<br>");
	document.write(s[3] + "<br>");
	document.write(s[4] + "<br>");
	document.write(s[5] + "<br>");
	document.write(s[6] + "<br>");
	
	for(var i = 0; i < s.length; i++) {
		document.write(s[i] + "\t");
	}

- split() 메소드로 문자들을 특정 구분기호로 잘라서 추출 가능하다.

- 구분기호를 이용해서 문자를 분리해서 배열로 리턴한다.

- 잘린 문자열들을 왼쪽의 s 배열로 리턴한다.

- 배열의 0번 인덱스부터 차례대로 저장된다.

- 차례대로 작성하여 출력할수도 있고 배열속성 length를 통해 반복문으로 출력할수도 있다.

 

String 객체 예제 3

- string03.html

 

문제 1 (string03.html 부분)

	// Q1. 키보드로 영문 이름을 입력받아서 대문자로 변환하는 프로그램 작성
	
	var name = prompt("당신의 영문 이름을 입력하세요","");
	var upper = name.toUpperCase();
	document.write(upper + "<br>");

- String 객체의 toUpperCase() 함수 사용

문제 2 (string03.html 부분)

	// Q2. 핸드폰 번호를 입력받아서, 마지막 4자리를 보이지 않게끔 별표(*)로 처리
	
	var num = prompt("핸드폰 번호를 입력하세요","");
	// num = "01012345678"
	
	if(num.length != 11) {
		alert("핸드폰 번호 11자리를 입력하세요.")
	} else {
		var result = num.substr(0, 7) + "****";
		document.write(result);	
	}

- 앞의 7자리를 그대로 추출해서 출력하고, 뒤의 4자리를 * 로 바꾸기

- sutstring() 이나 substr() 사용

- 여기선 substr(0, 7) 함수를 사용해서 처음부터 7자리를 추출하고 있다.

- length 속성으로 길이를 구해서 입력한 데이터가 11자리가 아니면 메세지를 뿌린다.

- 입력이 11자리일때 출력

- 입력이 11자리가 아닐때 출력


Math 객체

Math 객체

- 수학적 연산을 하기 위해 주로 사용되는 객체

- 내장 객체이므로 따로 객체를 만들면 안됨

- 속성을 사용시 Math.속성 으로 사용한다.

- 함수를 사용시 Math.함수() 로 사용한다.

+ 자바의 Math 클래스와 유사한 역할

+ 자바의 Math 처럼 new로 객체를 생성하면 안되고 자바 Math 클래스의 정적 필드, 정적 메소드와 유사

 

Math 객체 예제1

Math 객체 함수, 속성

- math01.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Math 객체</title>
</head>
<body>
<script>
	// Math 객체
	
	var num = 2.5234;
	
	document.write("PI = " + Math.PI + "<br>");	//3.141592653589793
	document.write("오일러 상수 = " + Math.E + "<br>");	//2.718281828459045
	
	document.write("절대값 : " + Math.abs(-30) + "<br>");	//30
	document.write("최대값 : " + Math.max(10,5,8,30,50) + "<br>");	//50
	document.write("최소값 : " + Math.min(10,5,8,30,50) + "<br>");	//5
	document.write("올림 : " + Math.ceil(num) + "<br>");	//3
	document.write("반올림 : " + Math.round(num) + "<br>");	//3
	document.write("난수 : " + Math.random() + "<br>");	//0~1사이의 난수 발생
	document.write("거듭제곱 : " + Math.pow(2, 3) + "<br>");	//2의 3승
	document.write("제곱근 : " + Math.sqrt(9) + "<br>");	//루트 9 = 3
	
</script>
</body>
</html>

 

출력

Math의 속성 (math01.html 부분)

	document.write("PI = " + Math.PI + "<br>");	//3.141592653589793
	document.write("오일러 상수 = " + Math.E + "<br>");	//2.718281828459045

- 속성 Math.PI 를 사용하고 있다

- 자바의 필드와 유사하게 속성을 통해 파이 값과 오일러 상수 값을 구하고 있다.

- 내장 객체이므로 객체 생성 없이 Math. 로 사용하고 있다

 

절대값 구하기 (math01.html 부분)

	document.write("절대값 : " + Math.abs(-30) + "<br>");	//30

- abs() 메소드를 통해 절대값을 구한다

 

최대값 구하기 (math01.html 부분)

	document.write("최소값 : " + Math.min(10,5,8,30,50) + "<br>");	//5

- max() 메소드를 통해 최대값을 구한다

- 여러개의 값 중 최대값을 구해준다. 2개 이상의 값이 들어갈 수 있다.

+ 자바에선 max() 메소드의 매개변수에 2개만 들어갈 수 있다, 2개 중 최대값만 구할 수 있음

 

최소값 구하기 (math01.html 부분)

	document.write("최소값 : " + Math.min(10,5,8,30,50) + "<br>");	//5

- min() 메소드를 통해 최소값을 구한다.

 

올림 (math01.html 부분)

	document.write("올림 : " + Math.ceil(num) + "<br>");	//3

- ceil() 함수를 통해 올림을 한다.

- 소수 첫째자리에 어떤 값이 오더라도 소수 첫째자리에서 무조건 올림

 

반올림 (math01.html 부분)

	document.write("최소값 : " + Math.min(10,5,8,30,50) + "<br>");	//5

- round() 함수로 소수 첫째자리에서 반올림한다

- 소수 첫째자리에 5 이상의 값이 오면 올림한다.

 

내림 (math01.html 부분)

	document.write("내림 : " + Math.floor(num) + "<br>");	//2

 

- floor() 함수를 통해 내림을 한다

- 소수점 첫째자리에 어떤 값이 오더라도 소수점 이하를 모두 버린다

 

난수 발생 (math01.html 부분)

	document.write("난수 : " + Math.random() + "<br>");	//0~1사이의 난수 발생

- random() 함수로 0 부터 1사이의 난수를 발생시켜준다.

ex) 난수 : 0.7289365971271167

 

거듭 제곱 (math01.html 부분)

	document.write("거듭제곱 : " + Math.pow(2, 3) + "<br>");	//2의 3승

- pow(x,y) 함수로 거듭제곱을 구한다.

- x의 y승 제곱근을 구함

 

제곱근 (math01.html 부분)

	document.write("제곱근 : " + Math.sqrt(9) + "<br>");	//루트 9 = 3

- sqrt() 함수로 제곱근을 구한다.

- sqrt(x) 에서 루트 x 의 값을 구함

+ 계산기 프로그램의 루트 기능을 구현할때 sqrt() 함수를 사용한다

 

Math 객체 예제2

random() 함수 예제

- 가위, 바위, 보 맞추기

- math02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>가위, 바위, 보 맞추기</title>
</head>
<body>
<script>
	var t = prompt("가위,바위,보 중에서 하나를 입력하세요","");
	
	switch(t) {
	case '가위' : t = 1;
				break;
	case '바위' : t = 2;
				break;
	case '보' : t = 3;
				break;
	default : alert("잘못 입력했습니다.");
				location.reload();	// 새로고침
	}
	
	// 1 ~ 3 사이의 난수 발생
	// Math.random() : 0 ~ 1 사이의 난수 발생
	// var r = Math.ceil(Math.random() * 3);	// 1 ~ 3 난수 발생
	var r = Math.floor(Math.random() * 3) + 1;	// 1 ~ 3 난수 발생
	
	alert("난수 : " + r);
	
	if (t == r) {
		alert("맞췄습니다.");
	} else {
		alert("틀렸습니다.");
	}
</script>
</body>
</html>

- switch~case를 이용해서 '가위'를 눌렀을땐 t에 1을 저장한다.

- location.reload() 를 통해 현재 문서를 새로고침 해준다.

- 잘못 입력했을땐 위에서 부터 다시 실행되므로 다시 입력받는 것

- 난수를 발생시켜서 t 변수에 저장된 값이 맞는지 판별

 

난수를 발생시키는 2가지 방법 (math02.html 부분)

	// 1 ~ 3 사이의 난수 발생
	// Math.random() : 0 ~ 1 사이의 난수 발생
	// var r = Math.ceil(Math.random() * 3);	// 1 ~ 3 난수 발생
	var r = Math.floor(Math.random() * 3) + 1;	// 1 ~ 3 난수 발생

- Math.floor() 함수를 사용하면 내려버리므로 마지막에 + 1을 해줘야함

- Math.random() 으로 하면 

- 무조건 올림인 Math.ceil() 을 사용하면 난수 0.xx 가 무조건 1이 된다

- 거기서 * 3을 하면 1 부터 3사이의 난수가 된다.????

이거 내가 이해하고 여기 설명하기

 

출력

 잘못된 값 입력시 출력

- 이후 새로고침되어 다시 시작

+ Recent posts