■ 자바스크립트(Javascript)란?
○ 정의
JavaScript는 웹 페이지에서 복잡한 기능을 구현할 수 있는 스크립팅 또는 프로그래밍 언어임
웹 페이지가 단순히 정적인 정보를 표시하는 것 이상으로
시의적절한 콘텐츠 업데이트, 대화형 지도, 애니메이션 2D/3D 그래픽, 스크롤링 비디오 주크박스 등을
표시할 때마다 JavaScript가 관련되어 있음.
○ HTML, CSS, Javascript 차이
- HTML : 문단, 제목, 데이터 표를 정의 페이지에 이미지, 영상을 삽입하는 등 콘텐츠를 정의
- CSS : 배경색 및 콘텐츠에 스타일을 적용하는 데 사용하는 언어
- Javascript : 동적으로 변경되는 콘텐츠를 만들고 멀티미디어를 제어하며
이미지에 애니메이션을 적용하는 등 모든 작업을 수행할 수 있는 언어
웹 사이트의 동작이나 상호작용을 정의 하는 언어
- HTML, CSS로 페이지 구성 및 배치를 하고 나서
Javascript로 페이지가 가진 기능 실행 및 동작활동을 실행함
언제부터 실행해야 할지 시점을 맞춰 주는 것이 중요
■ Javascript 환경구축
○ 환경구축 방법
1. HTML 내부에 작성하기
기본적으로 body아래에 작성해 주는것이 좋다.
이유 HTML의 태그와 CSS의 스타일이 모두 적용된 후 실행하기 때문이며
그래서 body내부에 태그 아래 쪽에 작성함
<body>
<!-- Contents 작성 -->
<script>
// Javascript 작성하는 부분
</script>
</body>
2. 자바스크립트 파일을 만들고 작성코드를 문서에 연결하기
.js로 확장자명으로 파일을 만들어서 작성한다.
<body>
<script src="script.js"></script>
</body>
■ 객체(Object)
○ 정의
특정 실체를 객관화 하여 인식하거나 이해하는 대상
세상에 실제로 존재하는 것을 실체로 칭한다면
나(주체)가 다른 실체를 바라볼때, 그 실체가 객체라고 함.
컴퓨터 과학에서는 메모리(실제 저장공간)에 할당 된 것으로 프로그램에서
사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미
자바스크립트에서의 객체
값 또는 기능을 가지고 있는 데이터로 웹브라우저도 소프트웨어 세계에 존재하는 사물로 객체이다.
웹브라우저 객체 의 대표 (Window) : 웹브라우저에 접근할 수 있음
○ 객체 사용법
- 객체이름 및 실제 객체뒤에 점을 찍어 주면 내부에 접근 할 수 있다.
- 객체.데이터 : 객체가 가지고 있는 숫자 문자등 다양한 데이터를 사용
- 객체.기능() : 객체가 가지고 있는 다양한 기능을 수행
○ 주석
- 주석 내용은 컴파일 하지 않고 사용자에게는 보여지는 것
// 한줄 주석
/*
여러줄
주석
*/
○ 기본사용
- window객체에서 alert() (경고창 기능을 사용하겠다)
window.alert()
- alert기능 내 ()에 작성되어진 것은 내부에 있는 것을 경고창에 넣어 주어 사용하겠다는 의미임
문자는 " " 큰따옴표 및 ' ' 작은 따옴표로 작성 +는 문자를 연결
window.alert("안녕"+'하세요')
- 여러개를 작성해줄때 기본 ;(세미콜론은 한줄 종료를 의미)
window.alert("안녕");
window.alert("웹페이지");
window.alert("기본");
- 주석처리
window.alert("안녕");
// window.alert("웹페이지");
window.alert("기본");
- 여러줄 주석
window.alert("안녕");
/*
window.alert("웹페이지");
window.alert("기본");
*/
■ Javascript 코드 작성시 규칙
○ 대문자와 소문자를 잘 구분 해서 작성
○ 구문의 끝에는 세미콜론(;) 입력해 끝을 알림
○ 한줄에는 1개의 구문을 작성하는것이 기본
■ 콘솔(console)
콘솔은 브라우저의 디버깅(debugging) 콘솔을 의미,
브라우저 안에 내장된 브라우저의 하위 객체로 브라우저 객체를 통해 접근
디버그(debug) : 컴퓨터 프로그램 개발 단계 중 시스템의
논리적 오류나 비정상적 연산(버그)를 찾아내고 수정하는 작업과정
디버깅 콘솔
개발자 도구를 열면 메뉴 중 콘솔항목이 있는데 이 화면이 디버깅 콘솔
자바스크립트 코드를 테스트(점검) 할 수 있다.
기본적으로 window 의 하위 객체 이지만 편의를 위해 생략해도 문제 없음
window.console.log(11);
console.log(100);
- 세미콜론이 없을때
window.console.log(11) console.log(100) //에러 문법적인 문제
window.console.log(11); console.log(100);
- 대소문자 잘못 사용시
console.log(11);
console.Log(100);
- clear
내 이전 콘솔의 내용을 지운다.
console.log("안녕");
console.clear();
console.log("기본");
console.log("이상");
■ 변수(Variable)
○ 변수(variable)
값에 상직적인 이름으로 변수명은 식별자(identifiers)라 불린다.
데이터에 붙이는 이름으로 변수를 이용하면 이름표를
붙여 둔 데이터를 기억해두었다가 필요할 때마다 재사용 할 수 있다.
○ 변수의 선언
변수를 만들어 주는 작업을 선언이라고 하며, 만들어진 변수에 첫 데이터를 지정하는 것을
변수의 초기화라 부른다. 동시 진행할 수 있고 따로 진행 가능
let 변수이름; // 변수 선언
변수이름 = 데이터; // 변수 초기화
let 변수이름 = 데이터; // 변수의 선언 및 초기화
let va1 = "안녕 ";
let va2;
va2 = "하세요";
console.log(va1+va2);
○ 변수의 이름 규칙
- 변수명에는 문자와 숫자 기호 $, _ 만이 포ㅓ함
- 변수명 첫번째에 숫자가 올수 없음
- 이미 다른 의미를 가지고 있는 단어(키워드)는 사용할 수 없다.
let console = "1";
console.log(console);
let 1va = "1";
let $va = "1";
console.log($va);
○ 변수의 변화
변수는 데이터를 기억하기 위해 사용, 변수는 한번에 하나의 데이터만 기억
기억하고 있는 값을 바꿔 사용 가능
let va1 = "안녕";
va1 = "웹수업";
console.log(va1);
va1 = "기본"
console.log(va1);
○ 변수의 선언 방식
- var : 변수를 선언 추가로 동시에 값을 초기화
- let : 블록 스코프 지역 변수 선언, 추가로 동시에 값을 초기화
- const : 블록 스코프 읽기 전용 상수를 선언
- var 와 let 의 차이로는 동일명으로 선언이 가능하다.
var a = 1;
var a = 2; // 동일명으로 선언가능
console.log(a);
let b = 1;
let b = 2; // 동일명 선언불가
console.log(b);
- var는 어디서나 선언해도 읽어 들일 수 있다.
var a1 = 1;
console.log("a1 = " + a1);
console.log("a2 = " + a2);
var a2 = 10;
console.log("아래쪽 a2 = " + a2);
let b1 = 1;
console.log("b1 = " + b1);
console.log("b2 = " + b2);
let b2 = 10;
- const
상수란 수식에서 변하지 않는 값을 뜻함
단 하나의 데이터만을 위해 사용하는 이름표 값의 변경이 불가능
상수는 선언과 동시에 초기화 해주어야 함. 그렇지 않으면 지정 불가
- 상수 선언 및 초기화
const con = '변하지 않음';
console.log(con);
- 값을 변경 불가
const con = '변하지 않음';
con = 20;
console.log(con);
- 선언하자 마자 초기화 하지 않아도 불가
const con;
con = 20;
console.log(con);
○ 변수에 저장 시킬수 있는 자료
자바스크립트로 표현 할 수 있는 모든 데이터를 기억할 수 있다.
간단한 자료로는 숫자와 문자열이 있음
- 숫자 저장 및 콘솔
let num1 = 10;
let num2 = 0;
let num3 = -30;
console.log(num1+num3);
- 실수 저장 및 콘솔
let num1 = 3.141592;
let num2 = -1.125;
console.log(num1+num2);
- 문자열 저장
" " 큰따옴표 및 ' ' 작은 따옴표로 감싸야 한다.
let str1 = "안녕 123";
let str2 = "2#$%^";
console.log(str1+str2);
- 변수내 타 변수 값 및 계산식 입력
let a = 10;
let b = 2;
let c = a+b;
let d = c;
console.log(c);
console.log(d);
○ Prompt
입력을 받을 수 있도록 해주는 메서드
prompt("입력창에 나올 메시지")
prompt()의 값은 입력한 값으로 반환되어 콘솔을 거쳐서 화면에 나옴
console.log(prompt("입력 >> "));
- 입력내용 변수 처리 및 결과값 반환
let input_data = "여기에 10을 입력하세요";
let result = prompt(input_data);
console.log("결과 = " + result);
■ 데이터 구조 및 형 / 연산
○ 원시형 데이터
- Boolean : true, false
- null : 비어있음
- nudefined : 값이 정의 되어 있지 않음
- Numver : 정수 형 또는 실수형
- String : 문자열
- 문자열은 더하면 이어주고 숫자형태는 더하기가 된다.
let a1 = 10;
console.log(a1 + 20);
let a2 = "10";
console.log(a2 + 20);
- 다른 사칙연산으로 변경하면 문자는 숫자화 된다.
let a1 = 10;
console.log(a1 - 20);
let a2 = "10";
console.log(a2 - 20);
console.log(a2 / 20);
console.log(a2 * 20);
- 문자열과 숫자를 더하면 문자열이 된다.
숫자를 먼저더해주려면()괄호를 작성해주면됨
let a1 = "안녕";
let a2 = 10;
console.log(a1+a2+20);
console.log(a2+20+a1);
console.log(a1+(a2+20));
○ 데이터 형 변환
- paseInt() : 정수 변환
- paseFloat() : 실수 변환
console.log(parseInt("10",2)); //2진수
console.log(parseInt("10",10)); //10진수
console.log(parseInt("10",8)); //8진수
console.log(parseInt("f",16)); //16진수
console.log(parseInt("10"));
- 실수 변환
console.log(parseInt("3.14"));
console.log(parseFloat("3.14"));
console.log(parseInt(10/3));
console.log(10/3);
○ 데이터 비교
- 비교 == 같은지 다른 지 boolean으로 나옴
let a1 = "안녕"=="안녕"; //비교 true
let a3 = "1" == 1; //문자를 숫자로 변환 true
let a2 = "" == 0; //비어 있는 것은 0 true
let a4 = "1" === 1; //=== 타입도 확인 false
let a5 = parseInt("1") === 1; //타입변환 paseInt 정수로 변경 true
console.log(a1);
console.log(a2);
console.log(a3);
console.log(a4);
console.log(a5);
○ 참조형 타입
- 함수, 객체, 배열등이 있다.
- 객체(Object) : 변수와 메서드를 한 곳에 모아주는 것
- 배열(Array) : 여러 개의 데이터 원소로 가진 데이터 집합
- 함수(Function) : 실행할 구문을 미리 정의 하고 사용하는 실행부
let obj = new Object(); //객체
let arr = new Array(); //배열
function sum(a,b){ //함수
let s = a+b;
}
○ 산술 연산자
console.log(10+3); //더하기
console.log(10-3); //빼기
console.log(10*3); //곱하기
console.log(10/3); //나누기
console.log(10%3); //나머지
○ 증감 연산자
변수의 값을 1씩 증가시키거나 1씩 감소 시키는 연산자
증가시키거나 감소시키기 때문에 증감연산자라고 한다.
연산자 | 설명 |
++x | 먼저 1 증가 (전위연산자) |
x++ | 나중에 1 증가 (후위연산자) |
--x | 먼저 1 감소 (전위연산자) |
x-- | 나중에 1 감소 (후위연산자) |
let i = 1;
console.log(++i); // 2 미리 증가시킴 (전위)
console.log(i++); // 2 나중에 증가시킴 (후위)
console.log(i); // 3
console.log(--i); // 2 미리 감소시킴
console.log(i--); // 2 나중에 감소 시킴
console.log(i); // 1
○ 복합 대입 연산자
변수의 값에 사칙연산을 시켜 바로 변경해 줄수 있다.
연산자 | 설명 |
x+=10 | x변수의 값에 10을 더한 값을 x에 대입해준다. |
x-=10 | x변수의 값에 10을 뺀 값을 x에 대입해준다. |
x*=10 | x변수의 값에 10을 곱한 값을 x에 대입해준다. |
x/=10 | x변수의 값에 10을 나눈 값을 x에 대입해준다. |
x%=10 | x변수의 값에 10을 나누어 나머지 값을 x에 대입해준다. |
let i = 1;
i+=10;
console.log(i); // 11
i=i+10;
console.log(i); // 21
i%=10;
console.log(i); // 1
■ 조건문
○ 조건문의 기본
프로그램의 순차적인 흐름을 제어 할때 사용하는 실행문을 제어문이라고 한다.
조건문이란 프로그램 내에서 주어진 표현식의 결과에 따라 별도의 명령을 수행하도록 제어
참일때 실행 및 거짓일때 실행하는 것들에 대해서 지정해 준다.
○ 비교 연산자
연산자 | 설명 |
x > y | x가 y보다 크면 true 아니면 false |
x >= y | x가 y보다 크거나 같으면 true 아니면 false |
x < y | x가 y보다 작으면 true 아니면 false |
x <= y | x가 y보다 작거나 같으면 true 아니면 false |
x == y | x와 y가 같으면 true 다르면 false |
x != y | x와 y가 다르면 true 같으면 false |
x === y | x와 y가 같으면서 타입이 같으면 true 다르면 false |
x !== y | x와 y가 다르거나 타입이 다르면 true 같으면 false |
○ IF문
- if문법 사용법
if(표현식, 조건){
표현식의 결과가 참일때 실행하고자 하는 실행문;
}
- 사용예시
let x = 10, y = 20;
if (x == y) {
document.write("x와 y는 같습니다.");
}
if (x < y) {
document.write("x가 y보다 작습니다.");
}
if (x > y) // 실행될 실행문이 한 줄뿐이라면 중괄호({})를 생략할 수 있음.
document.write("x가 y보다 큽니다.");
- if, else문법 사용
if(표현식, 조건){
표현식의 결과가 참일때 실행하고자 하는 실행문;
}
//다른 실행문을 넣으면 else가 if를 인지 하지 못함;
else{ //조건을 넣어 주지 않는다.
//else는 if가 없으면 사용할 수 없다.
표현식의 결과가 거짓일때 실행하고자 하는 실행문;
}
- if, else, else if 문법 사용
if(표현식1, 조건){
표현식의 결과가 참일때 실행하고자 하는 실행문;
}
//다른 실행문을 넣으면 else if가 if를 인지 하지 못함;
else if(표현식2){//몇번이든 다시 사용가능
//else if는 if가 없으면 사용할 수 없다.
표현식1의 결과가 거짓이면서 표현식 2가 참일때 실행하고자 하는 실행문;
}
else if(표현식3){
표현식1,2의 결과가 거짓이면서 표현식 3이 참일때 실행하고자 하는 실행문;
}
else{
표현식1,2,3 결과가 거짓일때 실행하고자 하는 실행문;
}
- 사용예시
let x = 10, y = 20;
if (x == y) {
document.write("x와 y는 같습니다.");
} else if (x < y) {
document.write("x가 y보다 작습니다.");
} else { // x > y인 경우
document.write("x가 y보다 큽니다.");
}
- 삼항연산자
간단히 표현할수 있도록 한 내용
표현식 ? 반환값1 : 반환값2
let x = 3, y = 5;
let result = (x > y) ? x : y // x가 더 크면 x를, 그렇지 않으면 y를 반환함.
document.write("둘 중에 더 큰 수는 " + result + "입니다.");
- 중첩 조건문
조건문을 중첩하여 여러 조건에 따라 다양하게 적용할 수 있다.
if(표현식1){
if(표현식2){
표현식1이 맞고 표현식 2가 맞을때 실행하는 실행문;
}
else{
표현식1이 맞고 표현식 2가 아닐때 실행하는 실행문;
}
표현식1이 맞으면 실행하는 실행문; //표현식2와 상관없이 무조건 실행
}
else{
//여기에 if를 넣을 수도 있다.
표현식1이 아닐때 실행하는 실행문;
}
let x = 10, y = 20;
if (x != y) {
if(x>y){
document.write("x가 y보다 크다.");
} else{
document.write("x가 y보다 작다.");
}
} else {
document.write("x와 y는 같습니다.");
}
○ Switch문
표현식, 또는 조건에 따라 다른 명령을 수행하는 if문과 다르게
조건 값이 무엇일때 다른 명령을 수행할지를 결정해 준다.
- 문법
switch (조건 값) {
case 값1:
조건 값이 값1일 때 실행하고자 하는 실행문;
break; //사용을 하지 않으면 값1이 맞으면 밑에 까지 같이 실행됨
case 값2:
조건 값이 값2일 때 실행하고자 하는 실행문;
break;
default:
조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 실행문;
break;
}
- 사용예시
let x = 10;
switch (typeof x) {
case "number":
document.write("변수 x의 타입은 숫자입니다.");
break;
case "string":
document.write("변수 x의 타입은 문자열입니다.");
break;
case "object":
document.write("변수 x의 타입은 객체입니다.");
break;
default:
document.write("변수 x의 타입을 잘 모르겠네요...");
break;
}
- 기타 사용
let day = new Date().getDay(); // 오늘의 요일을 반환함. (일요일: 0 ~ 토요일: 6)
switch (day) {
case 1: // 월요일인 경우
case 2: // 화요일인 경우
case 3: // 수요일인 경우
case 4: // 목요일인 경우
default: // 0부터 6까지의 값이 아닌 경우
document.write("아직도 주말은 멀었네요... 힘내자구요!!");
break;
case 5: // 금요일인 경우
document.write("오늘은 불금이네요!!");
break;
case 6: // 토요일인 경우
case 0: // 일요일인 경우
document.write("즐거운 주말에도 열심히 공부하는 당신~ 최고에요!!");
break;
}
■ 반복문
반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 실행문
프로그램이 처리하는 대부분의 코드는 반복적인 형태가 많으므로, 가장 많이 사용되는 실행문 중 하나
○ while 문
while 문은 특정 조건을 만족할 때까지 계속해서 주어진 실행문을 반복 실행
- 문법
while (표현식) {
표현식의 결과가 참인 동안 반복적으로 실행하고자 하는 실행문;
}
- 사용예시
let i = 1;
while (i < 5) { // 변수 i가 5보다 작을 때만 while 문을 반복함.
document.write(i + "<br>");
i++; // 반복할 때마다 변수 i를 1씩 증가시켜 변수 i가 10보다 커지면 반복문을 종료함.
}
- do/while문
while 문은 루프에 진입하기 전에 먼저 표현식부터 검사하지만
do / while 문은 먼저 루프를 한 번 실행한 후에 표현식을 검사한다.
결과와 상관없이 무조건 한번은 루프를 실행함
- 문법
do {
표현식의 결과가 참인 동안 반복적으로 실행하고자 하는 실행문;
} while (표현식);
- 사용예시
let i = 1;
do { // 변수 i의 초깃값은 1이기 때문에 이 do / while 문은 단 한 번만 실행됨.
document.write("i : " + (i++) + "<br>");
} while (i > 3);
//i의 값은 2임
○ for문
for 문은 while 문과는 달리 자체적으로 초기식, 표현식, 증감식을 모두 포함하고 있는 반복문
- 문법
for (초기식; 표현식; 증감식) {
표현식의 결과가 참인 동안 반복적으로 실행하고자 하는 실행문;
}
- 사용예시
for (let i = 1; i < 10; i++) {
document.write(i + "<br>");
}
- for in
연속되어진 객체를 넣어주면 인덱스 번호로 개수 만큼 반복한다.
for (변수 in 객체) {
객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;
}
let arr= [10,20,30];
for(let i in arr){
document.write("i : " + i + " arr[i] : "+arr[i] + "<br>");
}
// 결과
i : 0 arr[i] : 10
i : 1 arr[i] : 20
i : 2 arr[i] : 30
- for of
연속되어진 객체를 넣어주면 값이 나오고 개수 만큼 반복한다.
for (변수 of 객체) {
객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;
}
let arr= [10,20,30];
for(let i of arr){
document.write("i : " + i + "<br>");
}
//결과
i : 10
i : 20
i : 30
○ 기타 제어문
- continue
만나게 되면 나머지 부분을 건너뛰고 다음을 실행 한다.
let Num = 3;
for (let i = 1; i <= 10; i++) {
if (i % Num == 0){
continue;
} // Num의 배수는 출력하지 않음.
document.write(i + " ");
}
// 결과
1 2 4 5 7 8 10
- break
만나게 되면 멈춘다.
let Num = 3;
for (let i = 1; i <= 10; i++) {
if (i % Num == 0){
break;
} // Num의 배수이면 멈춤.
document.write(i + " ");
}
//결과
1 2
■ 배열
○ 배열이란?
배열(array)는 이름과 인덱스로 참조되는 정렬된 값의 집합
배열을 구성하는 각각의 값을 배열요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를
인덱스(index)라고 한다.
- 자바스크립트 배열의 특징
배열 요소의 타입이 고정되어 있지 않다. 같은 배열에 다른 타입이 들어갈 수 있다.
배열은 array 객체로 다뤄진다.
○ 배열 생성
let arr1 = [1,"안녕",true]; // 배열 리터럴 이용
let arr2 = Array(10,20,"js","html"); //Array 객체의 생성자 이용
let arr3 = new Array(10,20,"js","html"); //new 연산자 이용 객체 생성
console.log(arr1);
document.write(arr1+"<br>");
document.write(arr2+"<br>");
document.write(arr3+"<br>");
○ 배열 참조
배열의 각 요소를 참조 하고 싶을 때는 [] 연산자를 사용한다.
자바스크립트에서 배열 요소의 개수를 배열의 길이라고 한다.
length에 자동으로 갱신되며 인덱스는 언제나 0에서 부터 시작함
let arr1 = [1,"안녕",true];
console.log(arr1[1]); //1번 인덱스 접근
arr1[3] = 100; //3번 인덱스 추가
arr1[4] = 20;
console.log(arr1);
- 배열의 개수 알아내기
let arr = [10,20,100,200];
console.log(arr.length); // 4
- 배열 추가
let arr = [];
arr.push(추가할 요소); // push() 메소드를 이용하는 방법
arr[arr.length] = 추가할 요소; // length 프로퍼티를 이용하는 방법
arr[특정인덱스] = 추가할 요소; // 특정 인덱스를 지정하여 추가하는 방법
- 반복문을 이용한 배열 추가
let arr = [];
for(let i = 0; i<10; i++){
arr[arr.length] = i;
}
console.log(arr);
○ 여러 배열 기능
- Join 배열안에 있는 내용을 합쳐준다.
let arr = [10,20,100,200];
let arrj = arr.join("-");
console.log(arrj);
console.log(typeof(arr));
console.log(typeof(arrj));
- reverse 반대로 돌려준다.
let arr = [10,20,100,200];
arr.reverse();
console.log(arr);
- sort 정렬
let arr = [5,2,10,22,1];
arr.sort();
console.log(arr);
arr.sort(function(a,b){
return a-b;
});
console.log(arr);
arr.reverse();
console.log(arr);
- push 마지막 추가, pop 마지막 삭제
let arr = [1,10,22,30];
arr.push(100);
arr.push(200);
console.log(arr);
console.log(arr.pop());
console.log(arr);
○ 다차원 배열
배열 요소가 또 다른 배열인 배열을 의미
let arr = new Array(3);
arr[0] = new Array(2);
arr[1] = new Array(3);
arr[2] = new Array(4);
arr[1][0] = 10;
console.log(arr);
■ 함수
○ 함수란?
하나의 특별한 목적의 작업을 수행하도록 설계된 독립적인 블록을 의미
함수는 필요할 때마다 호출하여 해당 작업을 반복해서 수행할 수 있다.
○ 함수의 정의
함수는 function키워드로 시작하며, 이름, 매개변수(parameter), 실행문으로 구성되어 있다.
function 함수이름(매개변수1, 매개변수2,...) {
함수가 호출되었을 때 실행하고자 하는 실행문;
}
- 반환
함수에서 실행한 결과를 전달 받던지 특정한 형태를 전달 받을 수 있다.
function add(x,y){
return x+y;
}
console.log(add(10,20)); //30
- 배열을 반환하는 함수 만들기
function arrcr(x){
let arr = new Array(x);
for(let i=0; i<x; i++){
arr[i] = i;
}
return arr;
}
let a = arrcr(10);
console.log(a);
- 전역변수, 지역변수
전역변수 : 전체 지역에서 사용할 수 있다.
지역변수 : 블럭내부에서만 사용가능 하다.
let sum = 10;
function s(x,y){
let sum = x+y;
return sum;
}
console.log(s(5,10)); // 15
console.log(sum); // 10
let sum = 10; // 전역변수
function s(x,y){
sum +=x; // 전역변수에 저장 sum에 x를 더해줘라
return x+y;
}
console.log(s(1,2)); //3
console.log(sum); //11
console.log(s(2,3)); //5
console.log(sum); //13
- 호이스팅 Hoisting
console.log(s(1,5)); //6
function s(x,y){ //함수는 밑에 있어서 호이스팅 되어 사용할 수 있다.
let sum =x+y;
return sum;
}
■ 객체(Object)
○ 객체(Object)
객체는 프로그래밍에서 데이터를 구조화하고 속성과 메서드를 포함할 수 있는 독립된 데이터 구조임
속성이란 키와 값을 가지고 있다. 변수의 값과 유사하며, 메서드는 함수 기능을 의미함
객체는 기본적으로 상태(프로퍼티-속성) 행동(메서드)을 갖는 논리적 개체를 모델링하며
객체 지향 프로그래밍의 핵심개념임
객체는 key: value 형식으로 데이터가 저장되며,
속성에 접근하거나 메서드를 호출해 객체의 상태를 일거나 변경할 수 있다.
이로서 유연하고 동적인 프로그래밍 환경을 가능하게 한다.
객체는 원시 데이터(Number, String, Boolean등)과 달리 복잡한 데이터 구조를 나타내고
프로토타입 기반 상속을 통해 다른 객체로부터 속성과 메서드를 상속할 수 있다.
이로서 재사용성과 확장성을 높여 코드의 효율성을 크게 향상시킨다.
- Object 예시
let person = {
name: "John",
age: 30,
greet: function() {
console.log("Hello, " + this.name);
}
};
person.greet(); // "Hello, John"
○ 객체 리터럴
객체 리터럴은 중괄호 { } 를 사용하여 직접 객체를 정의 하는 방법임
간단한 객체를 생성할때 매우 유용함
- 예시
let car = {
brand: "Toyota",
model: "Camry",
year: 2021,
start: function() {
console.log("The car has started.");
},
stop: function() {
console.log("The car has stopped.");
}
};
console.log(car.brand); // "Toyota"
car.start(); // "The car has started."
car라는 객체가 정의되어 brand, model, year라는 프로퍼티를 가진다.
객체 리터럴은 JavaScript에서 객체를 생성하는 가장 기본적인 방법임
- 사용되어지는 언어
1. 중괄호 { } 객체의 속성과 메서드를 정의함
2. 키(Key) 값(Value)쌍 : 객체는 여러개의 속성(프로퍼티)을 가질 수 있으며
각 속성은 키와 값의 쌍으로 이루어져 있음 year이 키 이고 2020이 값임
키는 속성의 이름으로 문자열로 표현되며, 다른형태도 가능
값은 키에 대응하는 값으로 어떤 데이터 타입도 될 수 있음
3. 메서드 : 함수도 리터럴 안에 가질수 있고 메서드라고 불린다.
메서드명 : function으로 만들어준다.
4. 쉼표(,) : 각 속성(프로퍼티)과 메서드는 쉼표로 구분됨
마지막 속성 뒤에는 쉼표가 없어도 된다.
- 객체 리터럴의 장점
1. 간결함 : 객체를 생성하는 가장 간단하고 직관적인 방법임.
2. 명확함 : 어떤 속성과 메서드가 포함되는지 한눈에 알 수 있다.
3. 구조화 : 여러 데이터를 한 곳에 모아서 구조적으로 표현가능
○ 계산된 속성이름 (Computed Property Names)
동적으로 속성 이름을 생성할 수 있는 기능이 추가되었음
객체를 생성할 때 속성 이름을 고정된 문자열이 아닌, 변수나 표현식으로 지정할 수 있음
let propName = "model";
let car = {
brand: "Toyota",
[propName]: "Camry", // propName이 "model"이므로, car 객체에 model: "Camry"가 추가됩니다.
};
console.log(car.model); // "Camry"
- 대괄호 표기법
계산된 속성 이름을 사용하려면, 속성 이름 자리에 대괄호 []를 사용하여 변수를 감쌈
대괄호 안에는 변수, 숫자, 함수 호출, 수학 연산 등 다양한 표현식이 들어갈 수 있다.
let dynamicKey = "age";
let person = {
name: "Alice",
[dynamicKey]: 25 // "age": 25
};
console.log(person.age); // 25
- 표현식 사용
대활호안에 복잡한 표현식을 사용 할 수 있음
let prefix = "user";
let id = 42;
let user = {
[prefix + id]: "John Doe" // "user42": "John Doe"
};
console.log(user.user42); // "John Doe"
- 함수나 메서드의 결과를 속성이름으로 사용
함수나 메서드의 결과물을 사용할 수 있다.
function generateKey(index) {
return `key${index}`;
}
let obj = {
[generateKey(1)]: "value1", // "key1": "value1"
[generateKey(2)]: "value2" // "key2": "value2"
};
console.log(obj.key1); // "value1"
console.log(obj.key2); // "value2"
- 탬플릿 리터럴
${}를 이용해 변수나 표현식을 문자열에 쉽게 삽입가능
// 일반적인 문자열 결합
let greeting = "Hello, " + name + "! You are " + age + " years old.";
// 템플릿 리터럴 사용
let greeting = `Hello, ${name}! You are ${age} years old.`;
- 객체 병합
function mergeObjects(key1, value1, key2, value2) {
return {
[key1]: value1,
[key2]: value2
};
}
let mergedObject = mergeObjects("name", "Alice", "age", 30);
console.log(mergedObject); // { name: "Alice", age: 30 }
○ this키워드
현재 실행 중인 함수가 속한 객체를 참조
let person = {
name: "John",
greet: function() {
console.log("Hello, " + this.name);
}
};
person.greet(); // "Hello, John"
- 생성자 함수에서 This는 새로 생성된 객체를 가리킨다.
function Person(name) {
this.name = name;
}
let person1 = new Person("Alice");
console.log(person1.name); // "Alice"
○ 프로퍼티 접근 및 수정
객체의 프로퍼티는 점 표기법 또는 대괄호 표기법을 사용하여 접근 및 수정이 가능
- 설명
console.log(car.brand); // "Toyota"
car.year = 2021;
console.log(car["year"]); // 2021
car.brand는 car 객체의 brand 프로퍼티에 접근하고 car.year는 해당 프로퍼티의 값을 수정하는 예제임
점 표기법이 주로 사용되지만 대괄호 표기법은 프로퍼티 이름이 변수로 지정되거나 특수 문자일때 유용함
- 추가와 삭제
car.year = 2021; //추가
delete car.year; //삭제
○ JSON과 객체
JavaScript 객체는 JSON(JavaScript Object Notation) 형식으로 직렬화 될 수 있다.
JSON은 객체 데이터를 문자열로 표현하며, 주로 데이터 전송이나 저장을 위해 사용됨
- 사용예시
let person = {
name: "Alice",
age: 25
};
let jsonString = JSON.stringify(person);
console.log(jsonString); // '{"name":"Alice","age":25}'
let parsedPerson = JSON.parse(jsonString);
console.log(parsedPerson.name); // "Alice"
- 설명
JSON.stringify()는 객체를 JSON 문자열로 변환하고,
JSON.parse()는 JSON 문자열을 객체로 변환
JSON은 데이터의 직렬화와 전송을 위한 표준 형식으로 널리 사용
○ 객체의 내장 메서드
JavaScript 객체에는 다양한 내장 메서드가 있음
대표적인 메서드로는 Object.keys(), Object.values(), Object.entries()
등이 있으며, 각각 객체의 키, 값, 키-값 쌍, 객체 복사 등의 작업을 수행
let person = { name: "Alice", age: 25 };
console.log(Object.keys(person)); // ["name", "age"]
console.log(Object.values(person)); // ["Alice", 25]
console.log(Object.entries(person)); // [["name", "Alice"], ["age", 25]]
○ 객체의 복사
객체를 복사할 때는 얕은 복사와 깊은 복사라는 두 가지 방식이 있다.
얕은 복사는 객체의 최상위 속성만 복사 중첩된 객체는 참조로 복사됨,
- 얕은 복사
얕은 복사는 복사된 객체의 속성이 원본 객체의 속성과 동일한 참조(주소)를
가르키게 되어 복사된 객체의 속성 값이 변경되면 원본 객체의 속성 값도 함께
변경될 수 있다.
let original = { name: "John", address: { city: "New York" } };
// 얕은 복사
let copy = Object.assign({}, original);
// 복사된 객체 수정
copy.name = "Alice";
copy.address.city = "Los Angeles";
console.log(original.name); // "John" (변경되지 않음)
console.log(original.address.city); // "Los Angeles" (변경됨)
- 깊은 복사
객체나 배열을 복사하는데 복사된 객체는 원본 객체와 완전히 독립적이며,
어떤 변경도 서로에게 영향을 미치지 않는다. 모든 중첩된 객체나 배열도 새롭게 생성되어 복사됨
let original = { name: "John", address: { city: "New York" } };
// 깊은 복사
let deepCopy = JSON.parse(JSON.stringify(original));
// 복사된 객체 수정
deepCopy.name = "Alice";
deepCopy.address.city = "Los Angeles";
console.log(original.name); // "John" (변경되지 않음)
console.log(original.address.city); // "New York" (변경되지 않음)
○ 객체의 상속
JavaScript 객체는 프로토타입이라는 숨겨진 속성을 통해
다른 객체로부터 속성과 메서드를 상속받을 수 있다.
모든 객체는 자신의 프로토타입을 가리키는 __proto__라는 속성을 가지며,
이는 객체 상속의 기초임
let animal = {
eats: true,
walk: function() {
console.log("Animal walks");
}
};
let rabbit = {
jumps: true,
__proto__: animal
};
console.log(rabbit.eats); // true
rabbit.walk(); // "Animal walks"
- 설명
rabbit 객체는 animal 객체를 프로토타입으로 가지며,
rabbit이 직접 정의하지 않은 프로퍼티와 메서드는
프로토타입 체인을 통해 animal 객체에서 상속됨
■ 선택하기
○ DOM
Document Object Model로 웹 페이지의 콘텐츠 및 구조, 스타일요소를 구조화시켜 표현하여
프로그래밍 언어가 해당 문서에 접근하여 읽고 조작할 수 있도록 제공하는 인터페이스
○ ID 선택자
ID명을 HTML 구조에서 검색해 선택해 주는 것
document.getElementById("아이디명");
//예시
document.getElementById("title");
- 사용해서 css style 조절하기
<style>
.box{
width: 50px;
height: 50px;
border: 1px solid #000;
}
</style>
<body>
<h1 id="title">제목</h1>
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>
<div class="box" id="box3"></div>
<script>
document.getElementById("title").style.backgroundColor="blue";
document.getElementById("box1").style.backgroundColor="#ff0";
document.getElementById("box2").style.width="200px";
document.write(document.getElementById("title").style.backgroundColor);
</script>
</body>
○ 태그 선택
document.getElementsByTagName("태그명");
//예시
document.getElementsByTagName("div");
- div 태그 width 변경하기
console.log(document.getElementsByTagName("div"));
document.getElementsByTagName("div")[0].style.width = "200px";
document.getElementsByTagName("div")[1].style.width = "200px";
document.getElementsByTagName("div")[2].style.width = "200px";
- 반복문 사용
let divtag = document.getElementsByTagName("div");
for(let i of divtag){
i.style.width = "10px";
}
○ 클래스 선택
document.getElementsByClassName("클래스명");
//예시
document.getElementsByClassName("box");
- 클래스 너비 변경
let cbox = document.getElementsByClassName("box");
cbox[1].style.width = "100px";
○ CSS선택자로 선택
//첫번째 한개선택
document.querySelector("css 선택자");
//여러개 선택
document.querySelectorAll("css 선택자");
//예시
document.querySelector("body > #box2");
- 사용예
let qs = document.querySelector("body > #box2");
document.querySelector("body > .box").style.width = "200px";
qs.style.backgroundColor = "red";
let qbox = document.querySelectorAll(".box");
for(let i of qbox){
i.style.height = "20px";
}
- Css 변경 다른 예
let qbox = document.querySelectorAll(".box");
for(let i of qbox){
i.style.cssText = "width: 200px; height: 20px; background-color: aquamarine;"
}
■ 이벤트
○ 이벤트
사용자가 웹페이지와 상호 작용할 때 발생하는 다양한 상황에 대한 반응을 정의하는 것
element.addEventListener('이벤트명', function() {
// 클릭 시 실행할 코드
});
- 자주 쓰는 이벤트 종류
이벤트명 | 설명 |
click | 클릭할 때 |
mouseover | 마우스가 특정 객체 위로 올려졌을때 |
mouseout | 마우스가 특정 객체 밖으로 나갔을때 |
mouseenter | 마우스가 특정 객체 안에 들어왔을 때 |
mouseleave | 마우스가 특정 객체에서 떠났을 때 |
mousedown | 마우스를 눌렀을 때 |
mouseup | 마우스를 떼었을 때 |
scroll | 문서에서 스크롤 할때 |
resize | 브라우저 창의 크기가 변경될 때 |
change | input 요소의 변동이 있을때 |
focus | 초점이 이동했을때 |
keydown | 키를 눌렀을 때 |
keyup | 키를 떼었을 때 |
- 기본사용하기
<style>
.box{
width: 50px;
height: 50px;
border: 1px solid #000;
}
</style>
<body>
<h1 id="title">제목</h1>
<button id="b1">버튼1</button>
<button id="b2">버튼2</button>
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>
<div class="box" id="box3"></div>
<script>
let ev1 = document.getElementById("b1");
let ev2 = document.getElementById("b2");
let boxcolor = document.getElementById("box1").style.backgroundColor; //이전색 저장
let box = document.getElementsByClassName("box");
ev1.addEventListener("click",function(){ //색변화
for(let i of box){
i.style.backgroundColor = "#ccc";
}
});
ev2.addEventListener("click",function(){ //이전색으로
for(let i of box){
i.style.backgroundColor = boxcolor;
}
});
window.addEventListener("resize",function(){ //브라우저 크기 변경시
let wiw = window.innerWidth;
if(wiw>500){
for(let i of box){
i.style.backgroundColor = "red";
}
}
else{
for(let i of box){
i.style.backgroundColor = boxcolor;
}
}
});
</script>
</body>
- 선택창 값 색상변경하기
<style>
#box{
width: 300px;
height: 300px;
border: 1px solid #000;
margin-top: 20px;
}
</style>
<body>
<h1 id="title">제목</h1>
<select name="" id="color">
<option value="">색상 선택</option>
<option value="#f00">빨강</option>
<option value="#00f">파랑</option>
<option value="#ac6f6f">기타</option>
</select>
<div id="box"></div>
<script>
document.getElementById("color").addEventListener("change",function(){
document.getElementById("box").style.backgroundColor = this.value;
});
</script>
</body>
'HTML + CSS > Javascript' 카테고리의 다른 글
Js - GSAP (0) | 2024.10.10 |
---|---|
Js - Fullpage (0) | 2024.10.08 |
Js - Swiper (1) | 2024.10.07 |