웹브라우저는 한번 화면에 출력되면 자기 자신을 바꿀 수 없지만, JS를 이용해 바꾸기 가능
JavaScript은 동적인 언어 cf. HTML은 정적인 언어
웹브라우저 제어를 하기 위해서는 CSS와 JavaScript가 필요
<body><script>
document.write(1+1)</script>
1+1
</body>
script태그 안에 document.write는 JS 언어
위와 같은 경우 js 안에 있는 1+1은 웹브라우저에서 2로 나타내지만
body안에 있는 1+1는 1+1 그대로 나타냄
이벤트
경고창 = alert
onclick
이벤트가 클릭됐을때 작동
어떠한 이벤트가 일어났을 때 js 실행되도록 하는 것
onchange
이벤트가 변경됐을때 작동
input이나 select 등의 데이터가 변경될 때 호출
Javascript를 통해 변화가 일어났는지 탐지
SELECT BOX를 이용해 어떤 이벤트를 실행하고자 할 때는 주로 사용
onkeydown
키를 눌렀을때 이벤트
shift, alt, controll, capslock 등의 모든 키에 동작
한영변환, 한자 등의 특수키는 인식 못함
onkeyup
키를 눌렀다가 땠을 때 이벤트
onkeydown 에서 인식하는 키들을 인식
onkeypress
실제로 글자가 써질때 이벤트
shift, tap, enter 등의 특수키는 인식 못함
콘솔
크롬 개발자 도구
개발자도구에 alert('문자열'.length)라고 치면 경고창으로 총 몇개의 글자인지 뜸
콘솔을 통해 js 실행하면 현재 보고 있는 웹페이지 대상으로 js 실행됨
콘솔창으로 보는 습관을 들이자
야간모드, 주간모드 버튼 통해서 바꾸는 기능
<inputtype="button"value="night"onclick="document.querySelector('body').style.background='black'; document.querySelector('body').style.color='white';"><inputtype="button"value="day"onclick="document.querySelector('body').style.background='white'; document.querySelector('body').style.color='black';">
문자열(string)과 숫자(number)
문자열, 숫자열 잘 확인
숫자에 따옴표 붙히면 문자열 됨 (ex. '1'+'1'='11')
산술 연산자 : 사칙연산
문자열
.length : 문자열 길이
.toUpperCase() : 대문자로 변경
.indexOf('문자열') : 괄호 안의 문자열이 몇번째에 나타나는 지 알려줌
.trim() : 문자열 공백을 없애줌
변수와 대입 연산자
변수 대입연산자 값(상수) → a = 1
variable(변수) : 대입 연산자를 통해 값 바뀔 수 있음 cf. constant(상수) : 변하지 않고, 항상 일정한 값을 갖는 수
변수명 앞에 변수의 약자인 var을 적는 습관 들이기
사이 사이에 문자열 자주 바꿔야 하는 경우
var name ='JENNIE'alert("abcabcabcabc"+name+"abcabcabcabcabcabcabc"+name+"abcabcabcabc.")
자주 바뀔 문자열 변수를 정해 넣어두고, 해당 문자열이 들어가는 곳에 "+변수명+" 적으면 됨
제어할 태그 선택하기
JavaScript에서 CSS 선택자를 이용해서 TAG 선택
document.querySelector() → 괄호 안은 '적용하고 싶은 태그, 클래스, 아이디'
JavaScript에 css style 속성을 통해 색상 변경
.style.backgroundColor: red; (배경)
.style.color: red; (글씨)
프로그램, 프로그래밍, 프로그래머
프로그램 : 순서
프로그래밍 : 순서를 만드는 행위
프로그래머 : 순서를 만드는 사람
프로그래밍 언어 : 시간의 순서에 따라서 실행되어야 할 기능을 프로그래밍 언어 문법에 맞게 글로 적어 두는 방식
JavaScript : 컴퓨터 언어, 프로그래밍 언어 cf. HTML : 컴퓨터 언어 O, 프로그래밍 언어 X
JavaScript는 사용자와 상호작용하기 위해 고안된 컴퓨터 언어이기 때문에 시간의 순서에 따라서 실행되어야 함
비교 연산자와 Boolean 데이터 타입
비교연산자 : true or false 둘 중 하나의 값을 만들어내는 연산자
Boolean : true 와 false의 값
===(동등비교연산자)
& l t ;( < 의미)
조건문
if문 괄호 안에는 불리언 데이터 타입이 옴 (true or false)
불리언의 값에 따라 실행되는 코드가 바뀜
true
첫번째 중괄호 실행, 두번째 중괄호 무시
false
첫번째 중괄호 무시, 두번째 중괄호 실행
조건문 활용
night, day button 하나로 만들기
value 가져오기 → document.querySelector('#night_day').value === 'value값'
.splice(시작위치, 제거건수, 추가할 요소) : 제거 후 해당 위치에 새로운 요소 추가 가능
반복문 (Loop)
순서대로 실행되는 프로그램의 실행 순서를 제어하는 제어문
언제 종료될 것인지 지정하는 것이 필요
i = 0;
while(종료 지정) {
~~
~~
i = i + 1;
}
<h1>Loop</h1><ul><script>
document.write('<li>1</li>');var i =0;while(i <3){
document.write('<li>2</li>');
document.write('<li>3</li>');
i = i +1;}
document.write('<li>4</li>');</script></ul>
/// i가 0일 때 i에 1씩 더하면서 3보다 작을 때 끝내라
/// 그러므로 2+1 = 3 i 3번 반복 되면 끝남
배열과 반복문
배열 : 순서대로 연관된 데이터 정리정돈
반복문 : 순서대로 담긴 데이터 하나씩 꺼내 자동화된 처리를 할 수 있는 문법
변수에 값 넣기
반복문 돌리기
반복문을 돌리되 i < 변수.length로 기입해야 추후 손댈 일이 없음
리스트 형태로 값을 넣고 싶다면
반복문 안에 document.write('<태그>'+coworkers[i]+'</태그>')
링크를 넣고 싶다면 반복문 안 document.write안에 넣고 링크 뒤에 '+coworkers[i]+' 넣기
a태그 안에 target="_blank"를 넣으면 새창에서 열림
<body><h1>Loop & Array</h1><script>var coworkers =['egoing','leezche','5w31892p','woovely','graphittie','taeho'];</script><h2>Co workers</h2><ul><script>var i =0;while(i < coworkers.length){
document.write('<li><a href="http://www.naver.com" target="_blank" '+coworkers[i]+'>'+coworkers[i]+'</li>');
i = i +1;}</script></ul></body>
배열과 반복문의 활용
개발자도구로 꼭 먼저 해보기
야간모드 링크 밝게, 주간모드 링크 어둡게 표시하기
모든 a태그 가져오기 → document.querySelectorAll('a')
바꿀 태그 모두 가져온 후 반복문 돌리기
바꼈을 때 색상도 각각 다르게 설정
<inputtype="button"value="night"onclick="
var target = document.querySelector('body');
if(this.value === 'night'){
target.style.backgroundColor = 'black';
target.style.color = 'white'
this.value = 'day'
var alist = document.querySelectorAll('a');
var i = 0;
while(i < alist.length) {
alist[i].style.color = 'powderblue';
i = i + 1;
}
} else {
target.style.backgroundColor = 'white';
target.style.color = 'black';
this.value = 'night'
var alist = document.querySelectorAll('a');
var i = 0;
while(i < alist.length) {
alist[i].style.color = 'blue';
i = i + 1;
}
}
">
함수 예고
수납상자
body부분에 넣었던 야간,주간모드를 head부분 script태그 안에 넣기
넣은 후 함수 시작인 function 이름() {}
괄호 안에 self로 적고 기존 this를 self로 바꿔주기
body 안 input onclick 안에 nightDayHandler(this) 넣기
<head><script>functionnightDayHandler(self){var target = document.querySelector('body');if(self.value ==='night'){
target.style.backgroundColor ='black';
target.style.color ='white'
self.value ='day'var alist = document.querySelectorAll('a');var i =0;while(i < alist.length){
alist[i].style.color ='powderblue';
i = i +1;}}else{
target.style.backgroundColor ='white';
target.style.color ='black';
self.value ='night'var alist = document.querySelectorAll('a');var i =0;while(i < alist.length){
alist[i].style.color ='blue';
i = i +1;}}}</script><body><inputtype="button"value="night"onclick="nightDayHandler(this)"></body>
매개변수 self로 정한 후, this 자리에 모두 self 넣어줌 (self가 아닌 다른 이름으로 해도 됨)
그리고 input 안 onclick에는 self가 아닌 this를 넣어줘야 함
객체 예고
이름이 있는 정리정돈 상자
순서없이 정보 저장
중괄호로 시작해 중괄호로 끝남
서로 연관된 함수와 변수를 같은 이름으로 그룹핑해 잘 정리정돈 하기 위한 도구
함수가 많아지면 힘들기 때문에 이러한 함수를 그룹핑하기 위해 객체 사용
메소드 → 객체에 속해 있는 함수
객체.메소드()
객체의 쓰기와 읽기
배열은 대괄호, 객체는 중괄호
Create (생성)
객체를 만든 후 중괄호 안에 값 넣기(key:value형식)
document.write ('key : ' +객체명.key+)
add (추가)
객체명.key = 'value'
document.write ('key : ' +객체명.key+)
이름에는 띄어쓰기 안됨
객체명['k e y'] = 'value' → 객체명 다음 . X
document.write ('key : ' +객체명['k e y']+)
객체와 반복문
Iterate (반복)
for (ver key in 객체명) {
document.write(key+);
}
→ key
for (ver key in 객체명) {
document.write(coworkers[key]+);
}
→ value
for (var key in coworkers) {
document.write(key+' : '+coworkers[key]+' ');
} → key : value
<script>for(var key in coworkers){
document.write(key+' : '+coworkers[key]+'<br>');}</script>
객체프로퍼티와 메소드
프로퍼티 : 객체에 소속된 변수
메소드: 객체에 소속된 함수
property & Method
coworkers.showAll = function () {} = function showAll() {} = var showAll = function () {}
<script>
coworkers.showAll=function(){for(var key inthis){
document.write(key+' : '+this[key]+'<br>');}}
coworkers.showAll();</script>
객체 이름이 바뀔 경우
데이터 가져오지 못하는 현상 발생 할 수 있음
그래서 showAll 안에 coworkers라는 객체이름을 모두
this로 변경