[이전 포스팅 정리]
javascript
자료
자료형
변수/상수
연산자
1변수 -> 1개값
여러 개 값=>1변수/상수에 넣을 순 없는가? --> 배열(array)
제어
=>flowchart<=알고리즘(순서를 먼저 정하고 코딩하는 습관!)
입력 -> 처리 -> 출력
조건에 의한 분기-이진트리 (if, if~else,if~else if ~else, switch~case~default, 삼항연산자)
조건에 의한 반복-반복횟수 (for, while, do~while)
초기값, 조건식, 증가값 -> 반복횟수
*조건: 비교연산자나 논리연산자의 결과(true/false)
기타 break, continue, label
*중첩 예제) 별표, 구구단, html결합
[함수]
반복해서 사용되는 코드를 묶어놓은 후 사용함
변수와 제어문으로 이루어짐
사용자 정의 함수 - 개발자 정의한 함수
내장함수- js스크립트에 포함되어있는 함수 => 라이브러리
*사용법
형변환
문자열 => 숫자
숫자 => 문자열
-> isFinite() - isXXX =>true/false
-> isNaN()
함수의 선언
- 선언적 함수
function 함수명 () {
내용(변수, 제어문)
}
- 익명함수= 변수처럼 선언
함수의 호출
함수명();
* 함수작성법(단순 함수 선언)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
//함수의 선언을 헤드로 뽑아내어 분리한다(다른 html에도 참조하여 사용 가능하다.=>라이브러리 효과)
function dofunc1() {
console.log('dofunc1() 호출');
}
</script>
</head>
<body>
<script type="text/javascript">
//함수의 호출
dofunc1();
dofunc1();
dofunc1();
</script>
</body>
</html>
* 함수작성법2(매개변수 포함)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
//함수의 선언을 헤드로 뽑아내어 분리한다(다른 html에도 참조하여 사용 가능하다.=>라이브러리 효과)
function dofunc(data1,data2=2,data3=3) {
console.log('dofunc() 호출: ',data1);
console.log('dofunc() 호출: ',data2);
console.log('dofunc() 호출: ',data3);
}
</script>
</head>
<body>
<script type="text/javascript">
dofunc(10,20,30);
dofunc(); //파라미터에 default값이 있으면 호출 파라미터에 아무것도 없어도 실행해서 값을 확인 가능
//만약 3개의 파라미터 중 하나가 없다고 하면 나머지 2개의 default값만 출력한다.
</script>
</body>
</html>
* 이를 활용한 간단한 계산기 만들기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
//계산기 함수
//calc(연산자, 값, 값)=> 연산자에 따라 연산결과 출력
//calc('+',10,20) => 30
function calc(lool, data1,data2){
let result;
if(lool=='+'){
result=data1+data2;
}
else if(lool=='-'){
result=data1-data2;
}
else if(lool=='*'){
result=data1*data2;
}
else if(lool=='/'){
result=data1/data2;
}
return result;
}
</script>
</head>
<body>
<script type="text/javascript">
console.log( calc('*',10,8)); //곱하기를 넣었을 때 연산이 이루어지면서 콘솔을 통해 결과가 나오게 된다.
</script>
</body>
</html>
* 익명함수 (const에 함수를 정의해서 이름이 없는 함수를 변수에 지정해서 함수처럼 사용할 수 있음)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
//익명함수 (이름이 없음)
//변수/상수의 값으로 함수 정의 입력할 수 있는 함수: 일급함수
const doFunc1=function(){ //내용을 할당함
console.log('doFunc1()호출');
};
const doFunc2= function(data1,data2){
let sum =data1+data2;
return sum;
}
</script>
</head>
<body>
<script type="text/javascript">
doFunc1(); //함수의 이름처럼 사용
console.log(doFunc1); //함수의 내용을 볼 수 있음 (값이 아닌 코딩한 내용)
console.log(typeof doFunc1);
console.log('결과: ',doFunc2(10,20));
</script>
</body>
</html>
*화살표함수(lambda함수)를 사용한 함수의 선언+ html 버튼과 연결하여 함수를 호출
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
const doFunc1= function(){
console.log('doFunc1()호출');
};
//화살표 함수(lambda 함수)
const doFunc2= ()=> console.log('doFunc2()호출');
//함수 정의를 더욱 간략히 적은 내용
//lambda함수 파라미터 방식
//인자가 1개 있을 때만 괄호를 생략할 수 있다.
const doFunc3= data => console.log('doFunc3()호출: ',data);
const doFunc4 = (data1, data2) => data1+data2;
</script>
</head>
<body>
<script type="text/javascript">
doFunc1();
doFunc2();
doFunc3(10);
console.log(doFunc4(10,20));
</script>
<!--html과 연동해서 호출
이벤트:마우스 클릭-->
<a href="javascript:doFunc1()">함수호출</a> <br /><br />
<input type="button" value="함수호출" onclick="doFunc1()"/> <br /><br /> <!--타입을 버튼으로 지정해서 함수와 연결 가능-->
<button onclick="doFunc1()">함수호출</button><br /><br /> <!--버튼 태그를 활용해서 함수와 연결 가능-->
</body>
</html>
*함수의 여러 선언방식을 이용하여 무작위로 입력한 3개의 수를 순서대로 출력하는 코드
=>정렬에 대한 지식이 아직 부족하기 때문에 각각의 경우의 수를 다 생각해서 if문을 돌렸다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
//세 개의 수를 입력받아서 순서적으로 출력하는 sortNumber함수 선언
//sortNumber(1,3,2)
//1. 선언 2. 익명 3. 화살표
function sortNumber(num1,num2,num3){ //선언방식
if(num1<num2&&num1<num3){
if(num2>num3){
return console.log(num1,num3,num2);
}else{
return console.log(num1,num2,num3);
}
}else if(num1>num2&&num1>num3){
if(num2>num3){
return console.log(num3,num2,num1);
}else{
return console.log(num2,num3,num1);
}
}else if(num1<num2&&num1>num3){
if(num2>num3){
return console.log(num3,num1,num2);
}
}else if(num1>num2&&num1<num3){
if(num2<num3){
return console.log(num2,num1,num3);
}
}
}
</script>
<script type="text/javascript">
const sortNumber2 = function(num1,num2,num3){ //익명방식
if(num1<num2&&num1<num3){
if(num2>num3){
return console.log(num1,num3,num2);
}else{
return console.log(num1,num2,num3);
}
}else if(num1>num2&&num1>num3){
if(num2>num3){
return console.log(num3,num2,num1);
}else{
return console.log(num2,num3,num1);
}
}else if(num1<num2&&num1>num3){
if(num2>num3){
return console.log(num3,num1,num2);
}
}else if(num1>num2&&num1<num3){
if(num2<num3){
return console.log(num2,num1,num3);
}
}
}
</script>
<script type="text/javascript">
const sortNumber3 = (num1, num2,num3) => { //화살표방식(lambda방식)
if(num1<num2&&num1<num3){
if(num2>num3){
return console.log(num1,num3,num2);
}else{
return console.log(num1,num2,num3);
}
}else if(num1>num2&&num1>num3){
if(num2>num3){
return console.log(num3,num2,num1);
}else{
return console.log(num2,num3,num1);
}
}else if(num1<num2&&num1>num3){
if(num2>num3){
return console.log(num3,num1,num2);
}
}else if(num1>num2&&num1<num3){
if(num2<num3){
return console.log(num2,num1,num3);
}
}
}
</script>
</head>
<body>
<script type="text/javascript">
sortNumber(4,2,1);
sortNumber2(3,2,1);
sortNumber3(5,3,2);
</script>
</body>
</html>
* 웹사이트에 필요한 여러 팝업창과 처리방법
<script type="text/javascript">
//출력, 입력
//alert('경고창'); //웹페이지에 팝업을 띄워 경고창을 나타낼 수 있도록 함
/*if(confirm('확인창')){ //true를 반환함
console.log('확인입력');
}else{
console.log('기타입력');
}
*/
let value=prompt('질문','응답'); //value의 값은 응답값이다.
if(value){
console.log('확인: ',value);
}else{
console.log('취소');
}
</script>
* prompt를 이용한 구구단 출력코드
<script type="text/javascript">
//단수를 입력받아서 구구단 출력
//출력, 입력
let value=prompt('확인하고 싶은 단수를 입력하세요','n단'); //value의 값은 응답값이다.
let html= '<table border="1" width="200">';
if(value){
for(let i=1;i<=9;i++){
html+='<tr>';
html+= '<td align="center">'+parseInt(value)+'X'+i+'='+parseInt(value)*i+'</td>';
html+='</tr>';
}
}
html+='</table>';
document.write(html);
</script>
# setInterval() / setTimeout()
<script type="text/javascript">
//주기적인 실행 - setInterval() / clearInterval()
//1번 실행 - setTimeout() / clearTimeout()
const work=function(){
console.log('work함수 실행');
};
//work();
// setTimeout(work, 3000); //3초 후에 한번 실행시켜주고 끝남
//setInterval(work,2000); //2초마다 한번 계속적으로 실행시킴 (무한루프)
/* setTimeout(function(){ //callback함수 - 시스템에 의해서 호출되는 함수
console.log('작업 함수 실행'); //타임아웃 안에 함수를 정의해서 호출하도록 함
},3000);
*/
setInterval(function(){ //callback함수 인터벌버전
console.log('인터벌 작업함수 실행');
},2000);
</script>
+) 인터벌 멈춤 코드
<script type="text/javascript">
let intervalId=setInterval(function(){ //인터벌 함수를 실행
console.log('작업 함수 실행');
},1000);
setTimeout(function(){ //타임아웃으로 한번 실행시키는 함수를 만들고 해당 함수 안에는 clearInterval을 넣어 생성한 인터벌을 정지시킨다.
clearInterval(intervalId);
},10000);
</script>
# eval() - 문자열의 프로그램화
<script type="text/javascript">
//문자열-프로그램화
let expr1='2+3';
console.log(expr1);
console.log(eval(expr1)); //2+3은 문자열이지만 eval이 붙으면서 덧셈이 가능해졌다.
let expr2 = 'let num1=10;'; //해당 코드는 문자열로 적었지만 eval을 적어서 해당 문자열을 프로그램화 시켰다.
expr2+='let num2=20;';
expr2+='alert(num1+num2);'; //따라서 alert라는 팝업이 나올 수 있게 된다.
eval(expr2);
</script>
[배열]
- 하나의 배열을 선언한 후 해당 공간을 나눠 사용하는 것 (아파트같이)
- 가능한 배열의 안쪽 내용은 같은 자료형으로 집어넣는 것이 좋음
배열.length: 배열의 길이 확인
index: 배열 내부 방의 순서
*배열의 선언방식
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
</script>
</head>
<body>
<script type="text/javascript">
//배열의 선언
let arr1=[]; //값이 없는 배열
let arr2=[273,32,104,234]; //값이 있는 배열
console.log(arr2.length); //배열의 구성요소에 관련된 출력을 볼 수 있음
//배열 내부 방의 순서: index [0,1,2,3]으로 구성됨
console.log(arr2[2]);
//배열의 마지막 방의 번호
console.log(arr2[3]);
console.log(arr2[arr2.length-1]);
arr2[0]=100;
arr2[1]=200; //배열의 인덱스에 직접적으로 접근하여 값을 바꿔 출력 가능하다.
console.log(arr2);
// 전체 데이터 출력(전통적인 for)
for(let i = 0; i<arr2.length;i++){ //배열의 크기까지 for문을 돌려서 배열 안에 있는 인덱스들의 내용을 출력한다.
console.log(arr2[i]);
}
//전체데이터 출력(쉬운 for)
for(let i in arr2){
console.log(arr2[i]);
}
//배열의 인덱스값만 출력
for(let i in arr2){
console.log(i);
}
//배열의 데이터값만 출력
for(let value of arr2){
console.log(value);
}
</script>
</body>
</html>
* 배열의 주소참조 (중요)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
</script>
</head>
<body>
<script type="text/javascript">
//선언
//값에 의한 참조
//깊은복사(값을 복사)
let num1=10;
let num2=num1;
console.log(num1);
console.log(num2);
num2=20;
console.log(num1);
console.log(num2);
//주소에 의한 참조
let arr1 = [1,2,3];
//얕은복사
let arr2=arr1; //주소값을 복사하는 것임
console.log(arr1[0]);
console.log(arr2[0]);
arr2[0]=10; //따라서 arr2[0]의 값을 바꾸면 arr1[0]의 주소 또한 바뀌게 된다.
console.log(arr1[0]);
console.log(arr2[0]);
</script>
</body>
</html>
*2차원 배열
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
</script>
</head>
<body>
<script type="text/javascript">
//일차원 배열
//다차원 배열(2차원 배열: 엑셀)
let arr1=[[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let arr2=[
[1,2,3],
[4,5,6],
[7,8,9]
];
/* console.log(arr2); //행데이터가 있고 안에 열 데이터가 있는 구조
console.log(arr2[0].length); //0번째 인덱스의 행데이터만 출력됨
console.log(arr2.length); */
//전체데이터 출력
//for~for
/* for(let row=0; row<arr2.length;row++){
for(let col=0; col<arr2[row].length;col++){
console.log(arr2[row][col]);
}
}
*/
for(let row in arr2){ //for in 형식으로 2차원 배열 정의하기
for(let col in arr2[row]){
console.log(arr2[row][col]);
}
}
//가변배열
let arr3 =[ //인덱스마다 배열의 크기가 달라도 괜찮음
[1],
[4,5],
[7,8,9],
[7,8,9,10]
];
for(let row in arr3){ //for in 형식으로 2차원 배열 정의하기
for(let col in arr3[row]){
console.log(arr3[row][col]);
}
}
</script>
</body>
</html>
번외) 3차원 배열의 출력
<script type="text/javascript">
//삼차원 배열
let arr1=[
[ [1,2,3,4],
[5,6,7,8]
],
[
[9,10,11,12],
[13,14,15,16]
],
[
[17,18,19,20],
[21,22,23,24]
]];
//for문을 3개 사용하여 3차원 배열의 전체내용 출력
for(let row=0; row<arr1.length;row++){
for(let col=0; col<arr1[row].length;col++){
for(let i=0; i<arr1[row][col].length;i++){
console.log(arr1[row][col][i]);
}
}
}
</script>