2020년 12월 04일
업데이트:
스크립트 언어란?
기존에 이미 존재하는 프로그램의 동작을 사용자의 요구에 맞게 수행되도록 제어하는 용도의 언어이다.
소스코드의 수정이 많은 곳에서 사용하기 적합하다.(Interpreter 방식)
*Interpreter란? 소스코드를 한 줄씩 읽어 바로 실행하는 방식.
스크립트 언어들은 빠르게 배우고 짧은 소스코드 파일로 상호작용을 하도록 고안되었다.
Javascript란?
웹 브라우저에서 많이 사용하는 인터프리터 방식의 객체 지향 프로그래밍 언어.
HTML 문서 내에 기술되고 , HTML과 함께 웹 브라우저에 의해서 해석됨.
-> 클라이언트 사이드 스크립트 언어라고 한다.(클라이언트 쪽에서 해석되는 스크립트 언어)
*(참고)JSP,파이썬 -> 서버 사이드 스크립트 언어(서버에서 해석되는 스크립트 언어)
*(참고)Javascript란 ECMA 스크립트 표준을 따르는 대표적인 웹 기술이다.
Javascript 작성 방법
자바스크립트 소스 코드는 함수 단위로 작성하고, 이벤트 속성을 이용하여 구동되게한다.
이벤트 속성은 태그마다 차이가 있음.
-> on이벤트명 = "실행할 함수명([전달값]);"
inline 방식
태그에 직접 간단한 소스코드를 작성해서 실행되게 하는 방법.
<body>
<button type="button"
onclick="window.alert('버튼이 클릭되어서 경고창이 출력됨.')" >경고창 출력</button>
<button type="button"
onclick="console.log('버튼이 클릭되어서 콘솔창에 내용이 출력됨')">콘솔창 출력</button>
<!-- console.log = 브라우저의 console창에 결과가 뜬다. 클라이언트 사이드이기 때문에 console창에서 소스코드 바로 작성,실행 가능하다 -->
<h4 onmouseover="style.backgroundColor='red'"
onmouseout="style.backgroundColor='yellow'">마우스 오버/ 마우스아웃</h4>
<!-- 마우스 오버 : 맘우스 아웃을 작성 안 하면 한 번 마우스가 올라가면 마우스를 떼도 계속 변경된 상태를 유지한다.
마우스 아웃 : 마우스를 올린 뒤 떼면 계속 변경된 상태를 유지한다.-->
</body>
internal 방식
자바스크립트 내용을 <script> 태그에 작성하여 실행되게하는 방식이다. script태그는 head, body 태그 내부에 작성함. (보통 body태그 맨 마지막에 사용하는 것을 권장함.)
<body>
<button type="button" onclick="testFn();">함수 실행 확인용 버튼.</button>
<script type="text/javascript">
/* type="text/javascript" = 기본값 (텍스트로 된 자바스크립트 라는 의미이다.)*/
function testFn(){
window.alert("testFn() 함수 실행 확인");
console.log("testFn() 함수 실행 확인");
}
</script>
</body>
external 방식
별도의 .js 파일을 생성하여 해당 파일에 자바스크립트 코드를 작성하고 가져다 사용하는 방법으로, js폴더를 만들어 내부에 sample.js 파일을 생성 후 함수를 작성한다.
실제 개발에서 가장 많이 사용되는 방법이며 , 언어와 역할을 분리하기,서로 분업이 쉬워진다.
// 외부에 작성된 자바스크립트
function sampleFn(msg){
window.alert("전달받은 값 : " + msg);
// window. 생략 가능
console.log("전달받은 값 : " + msg);
}
// 해당 js파일을 사용하고자 하는 html 파일의
// head 태그에 script 연결 코드 작성.
<head>
<!-- <head>에 external 방식의 js파일 연결 -->
<script src="js/sample.js"></script>
</head>
<body>
<button type="button" onclick="sampleFn('배고파파파')">버튼</button>
</body>
데이터 출력
자바스크립트 코드가 function()에 작성되지 않고 바로 script 태그 아래에 작성되면
브라우저가 html 코드를 위에서 아래로 순서대로 해석하다가 script 코드를 만나면 바로 해당 코드를 수행함.
<script>
document.write("document.write()로 출력한 내용");
alert("출력문구가 출력되었습니다.");
</script>
<br>
<button type="button" onclick="writeFn();">출력</button>
<script>
function writeFn(){
document.write("HTML 문서가 완전히 로드된 후 "
+" document.write()를 호출하게 되면"
+"기존에 HTML 문서에 작성되어있던 내용이 모두 삭제됨.");
}
// 기존에 로드된 내용이 다 사라지고 document.write에 작성된 내용만 남기 때문에 잘 사용하지 않음..
</script>
innerText /innerHTML 를 이용한 내용 변경
**innerText : 자바스크립트에서 요소의 내용을 읽거나 변경할 때 innerText라는 속성을 사용함.
태그가 인식이 안 되며 텍스트 형태로 출력된다.
**innerHTML : 요소의 내용을 변경할 때 내용에 포함된 태그를
실제 태그로 인식시키기 위해서는 innerHTML을 사용해야함.
<button type="button" onclick="check1();">innerText 확인</button>
<button type="button" onclick="check2();">innerHTML 확인</button>
<script>
function check1(){
// 요소의 아이디가 "area1"인 요소를 선택하여 얻어와
// area1 이라는 변수에 저장한다.
var area1 = document.getElementById("area1");
// 정말 id가 area1인 요소를 얻어 왔는지 확인한다.
console.log(area1);
// 얻어온 요소에서 작성된 내용만 얻어와 출력하기.
console.log(area1.innerText); // getter처럼 얻어오는 용도로 쓰임.
// 요소에 작성된 내용 변경
//area1.innerText = "innerText로 인해 내용이 변화됨." //setter처럼 값을 세팅하는 용도로 쓰임.
area1.innerText = "<h4>innerText로 인해 내용이 변화됨.</h4>"
// <h4></h4> 태그로 인식 안되고 그대로 출력됨.
}
function check2(){
var area1 = document.getElementById("area1");
// innerHTML을 getter로 사용
console.log(area1.innerHTML);
// getter로 사용 시 innerText와 같은 효과(내용만 읽어옴.)
// innerHTML을 setter로 사용
area1.innerHTML = "<h4>InnerHTML로 인해 내용이 변화됨.</h4>"
// 태그가 인식해서 글씨가 굵어짐.
}
</script>
console.log()
브라우저 개발자도구 -> console 화면에 내용을 출력하고자 할 때 사용.
(주로 디버깅할 때 사용.)
<button type="button" onclick="printConsole(10, 20);">console.log() 출력</button>
<script>
function printConsole(x, y){
console.log(x + "+" + y + "=" + (x+y));
}
</script>
window.confirm()을 이용한 데이터 입력
어떤 질문에 “예 / 아니오” 의 결과를 얻고자 할 때 사용함.
경고창에 “확인”,”취소” 버튼이 나타나며
“확인” 클릭 시 true, “취소” 클릭 시 false 가 반환된다.
<div id="area2"></div>
<button type="button" onclick="checkSleepy();">졸린지 확인</button>
<script>
function checkSleepy(){
//console.log(window.confirm("여기에 출력할 내용 작성"));
// window.confirm 먼저 실행 후 console.log 실행 된다.
var result = window.confirm("졸리면 확인, 아니면 취소를 누르세요.");
// window.confirm의 결과값을 result라는 변수에 저장함.
var str=""; // 결과를 저장할 변수 선언 후 빈 문자열을 저장하였다.
if(result){
str ="졸려 죽겠다...";
}else{
str ="왜 안 졸리지?";
}
// 아이디가 "area2"인 요소를 얻어와 area2 변수에 저장
var area2 = document.getElementById("area2");
// area2에 h3 태그로 str에 저장된 내용을 출력 + 글자 빨간색
area2.innerHTML = "<h3>"+str+"</h3>";
area2.style.color = "red";
/* area2에 글자색을 빨간색으로 하는 방법
1) style 태그에서 #area2을 선택하여 색 변경
2) inline style을 이용하여 색 변경
<h3 style='color:'red'>
3) 자바스크립트를 이용하여 색 변경
area2.style.color = "red";
*/
}
</script>
HTML태그 아이디로 접근
<div id="area1" class="area"></div>
<button type="button" onclick="accessId();">아이디로 접근</button>
<script>
function accessId(){
// 아이디가 area1인 요소의 배경색을 노란색, 텍스트 출력
var area1 = document.getElementById("area1");
// 배경 노란색으로 변경
area1.style.backgroundColor = "yellow";
// 텍스트 출력
area1.innerText = "아이디로 접근 성공";
}
</script>
<div id="area2" class="area"></div>
<button type="button" onclick="accessId2()">클릭마다 배경색변경</button>
<script>
function accessId2(){
//아이디가 "area2"인 요소를 얻어와 변수 aera2에 저장
var area2 = document.getElementById("area2");
//area2의 배경색을 얻어와 bgColor 변수에 저장
var bgColor = area2.style.backgroundColor; //getter
if(bgColor == "red"){
area2.style.backgroundColor = "yellow";
}else{
area2.style.backgroundColor = "red";
}
}
</script>
HTML태그 클래스명으로 접근
<div class="area test"></div>
<div class="area test"></div>
<button type="button" onclick="accessClass()">클래스로 접근</button>
<script>
function accessClass(){
// 클래스 속성값으로 "test"를 포함하고 있는 모든 요소 얻어와
// testArr 변수에 저장
var testArr = document.getElementsByClassName("test");
// ->getElementsXXX로 선택된 요소들은 배열(Array)의 형태로 반환된다.
testArr[0].style.backgroundColor = "lightblue";
testArr[1].style.backgroundColor = "lightpink";
}
</script>
HTML태그 태그명으로 접근
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<button type="button" onclick="accessTagName()">
태그명으로 접근
</button>
<script>
function accessTagName(){
// 문서 내에 있는 모든 li 태그를 얻어와서 list 변수에 저장
var list = document.getElementsByTagName("li");
for(var i=0; i<list.length; i++){
list[i].style.backgroundColor
="rgb(130, 220, " + (50 + 50 * i) + ")";
}
}
</script>
HTML태그 name으로 접근
<fieldset>
<legend>취미</legend>
<table>
<tr>
<td>
<input type="checkbox" name="hobby" id="game" value="game">
<label for="game">게임</label> <!-- id가 game인 것과 연결이 됨-->
</td>
<td>
<input type="checkbox" name="hobby" id="music" value="music">
<label for="music">음악</label> <!-- id가 music인 것과 연결이 됨-->
</td>
<td>
<input type="checkbox" name="hobby" id="movie" value="movie">
<label for="movie">영화감상</label> <!-- id가 movie인 것과 연결이 됨-->
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="hobby" id="eat" value="eat">
<label for="eat">먹기</label> <!-- id가 eat인 것과 연결이 됨-->
</td>
<td>
<input type="checkbox" name="hobby" id="book" value="book">
<label for="book">독서</label> <!-- id가 book인 것과 연결이 됨-->
</td>
<td>
<input type="checkbox" name="hobby" id="sleep" value="sleep">
<label for="sleep">잠자기</label> <!-- id가 sleep인 것과 연결이 됨-->
</td>
</tr>
</table>
</fieldset>
<div id="area3" class="area"></div>
<button type="button" onclick="accessName();">name으로 접근</button>
<script>
function accessName(){
// 문서 내에서 name 속성값이 "hobby"인 요소를 모두 얻어와
// 배열 형태로 hobbyList변수에 저장.
var hobbyList = document.getElementsByName("hobby");
// 아이디가 "area3"인 요소를 얻어와 area3변수에 저장
var area3 = document.getElementById("area3");
// area3 요소의 모든 내용을 삭제
area3.innerHTML="";
// 체크 개수를 저장할 변수 선언
var count =0;
// 체크된 요소의 value값을 출력하고, 개수를 카운트
for(var i=0; i<hobbyList.length; i++ ){
if(hobbyList[i].checked){
//.checked : 해당 요소가 체크가 되어있으면 true, 아니면 false
area3.innerHTML += hobbyList[i].value + " ";
count++;
}
}
area3.innerHTML +="<br><br>선택한 취미 개수 :" + count;
}
</script>
text box(입력상자)에 작성된 값 읽어오기
입력 : <input type="text" id="input" name="input">
<button type="button" onclick="readValue();">input값 확인</button>
<div id="area4" class="area"></div>
<script>
function readValue(){
// input,div 요소 얻어오기
var input = document.getElementById("input");
var area4 = document.getElementById("area4");
// 길이는 띄어쓰기 포함해서 계산이 된다.
console.log(input.value.length);
// input 태그에 작성된 값(value)의 앞 뒤 공백을 모두 제거했을 때
// 글자 길이가 0인 경우 == 아무것도 작성하지 않은 경우
if(input.value.trim().length == 0){
// 문자열.trim() : 문자열 양쪽에 공백 제거
alert("값을 입력해주세요");
// input태그에 있는 입력된 값 초기화
input.value="";
// 커서를 input에 이동하여 초점을 맞춤
input.focus();
}else{
// input 태그에 작성된 값(value)를 얻어와 area4에 출력
area4.innerHTML ="<h3>" + input.value + "</h3>"
}
}
</script>
변수 선언
<pre>
<script>
1) 변수명; //전역 변수(global) (전역 변수는 var 없이도 변수 선언 가능)
2) var 변수명; // 전역 변수(global)
function 함수명() {
3) var 변수명; //지역 변수(local)
}
</script>
</pre>
<script>
// 전역 변수 선언
str = "전역 변수"; //window라는 창 자체를 나타내는 객체의 필드로 str이 등록됨.
var str2="var 전역 변수"; // script 태그 바로 아래 작성된 var가 붙은 변수는 전역 변수가 된다.
function varTest(){
//전역변수와 동일한 변수명을 가진 지역변수 선언
var str = "지역 변수";
console.log("str 호출");
console.log(str); //지역 변수
// 동일한 이름의 변수가 있을 경우 가까운 변수(지역변수)가 우선권을 가짐.
console.log(window.str); //전역 변수
// 전역변수로 선언하면 window 객체에 등록됨.
console.log(this.str); //전역 변수
// this = 현재 창(문서)에 있는 str
console.log("----------------------------------------------------");
console.log("str2 호출");
console.log(str2); //"var 전역 변수"
console.log(window.str2); //"var 전역 변수"
console.log(this.str2); //"var 전역 변수"
console.log("----------------------------------------------------");
// 새로운 지역 변수 추가
var str3="새로운 지역 변수";
console.log("str3 호출");
console.log(str3); // 새로운 지역 변수
console.log(window.str3); //undefined : 정의되지 않음
console.log(this.str3); //undefined : 정의되지 않음
console.log("----------------------------------------------------");
// function 내부에 var 키워드 없이 선언된 변수는 전역 변수가 된다.
str4 = "새로운 전역 변수";
console.log("str4 호출");
console.log(str4); // 새로운 전역 변수
console.log(window.str4); // 새로운 전역 변수
console.log(this.str4); // 새로운 전역 변수
}
varTest(); // 함수 호출
</script>
자바스크립트의 자료형
자바스크립트의 변수는 별도로 자료형을 지정하지 않음.
->변수에 저장되는 값(리터럴)에 의해서 자료형이 결정됨.
<ul>
<!-- char 자료형이 없음. "", '' 둘 다 문자열을 나타낸다. -->
<li>string(문자열) -- "문자열", '문자열', "A", 'A'</li>
<li>number(숫자) -- 1, 0.123, 99999999999</li>
<li>boolean(논리값) -- true, false</li>
<li>object(객체) -- 배열(Array), { name : "홍길동" }</li>
<!-- { name : "홍길동" } == 자바스크립트 객체 표기법 == json -->
<li>function(함수) -- var t1 = function test(){} </li>
<!-- 함수를 변수에 저장 가능함. t1을 호출하면 test 함수 실행된다. -->
<li>undefined(정의되지 않은 변수) -- var a</li>
<!-- 변수에 값을 초기화 하지 않음 -->
</ul>
<button type="button" onclick="typeTest();">자료형 테스트</button>
<div id="area1"></div>
<script>
function typeTest(){
var area1 = document.getElementById("area1");
var name = "홍길동"; // string
var age = 20; // number
var check = true; //boolean
var hobbyList = ['게임','노래','잠']; //object
var user = { id : "user01" , pwd : "pass01" }; //object
var fn = function plusNumber(num1, num2){ //function
var sum = num1+num2;
return sum;
}
var undef; //undefined
// typeof : 값의 자료형을 확인하는 연산자
area1.innerHTML = ""; // area1 이전에 있던 내용 삭제
area1.innerHTML += name + "의 자료형 : " + typeof name + "<br>";
area1.innerHTML += age + "의 자료형 : " + typeof age + "<br>";
area1.innerHTML += check + "의 자료형 : " + typeof check + "<br>";
area1.innerHTML += hobbyList + "의 자료형 : " + typeof hobbyList + "<br>";
area1.innerHTML += user + "의 자료형 : " + typeof user + "<br>";
area1.innerHTML += fn + "의 자료형 : " + typeof fn + "<br>";
area1.innerHTML += undef + "의 자료형 : " + typeof undef + "<br>";
console.log(user.id);
console.log(user.pwd);
console.log(fn(100,200));
}
</script>
문자열(string)
”” 또는 ‘‘으로 묶여 있는 리터럴
자바스크립터에서 문자열을 위한 함수가 내장되어 있는 내장객체 String을 제공함.
<button type="button" onclick="showStringFn();">문자열 관련 함수</button>
<div id="area1" class="area"></div>
<script>
function showStringFn(){
var str1 = "Hello World";
var area1 = document.getElementById("area1");
area1.innerHTML =""; // area1의 기존 내용 삭제
area1.innerHTML += "toUpperCase() : " + str1.toUpperCase()+ "<br>"; //대문자
area1.innerHTML += "toLowerCase() : " + str1.toLowerCase()+ "<br>"; //소문자
area1.innerHTML += "length : " + str1.length + "<br>"; //문자열 길이
// 문자열 내 특정 문자 인덱스 검색
area1.innerHTML += "앞에서 부터 첫 번째 l의 위치 "+ str1.indexOf("l")+("<br>");
area1.innerHTML += "뒤에서 부터 첫 번째 l의 위치 "+ str1.lastIndexOf("l")+("<br>");
// 문자 추출
for(var i=0; i<str1.length; i++){
area1.innerHTML += i+"번째 인덱스 : " + str1.charAt(i)+("<br>");
}
// 문자열 자르기
area1.innerHTML += "문자열 일부만 잘라서 반환 : " + str1.substring(6,str1.length)+("<br>");
//6 이상 11 미만
var str2 = "사과, 바나나, 복숭아, 키위, 귤";
var fruits = str2.split(", ");
area1.innerHTML += "str2.split() : " + fruits;
console.log(fruits);
}
</script>
숫자(number)
정수, 부동소수점(실수), Infinity, NaN 리터럴이 존재.
수학과 관련된 함수를 제공하는 Math 내장 객체가 존재함.
<button type="button" onclick="showMathFn();">수학 관련 함수</button>
<div id="area2" class="area"></div>
<script>
function showMathFn(){
var area2 = document.getElementById("area2");
area2.innerHTML = ""; //area2 기존에 있던 내용 삭제
var num1 = -123;
area2.innerHTML += "num1 : " + num1 + "<br>";
area2.innerHTML += "절대값 : " + Math.abs(num1) + "<br>";
var num2 = 123.456;
// 반올림, 올림, 내림은 소수점 첫번재 자리에서 반올림 하도록 되어있음.
// 일의 자리까지만 표시 됨.
// round, ceil, floor = 일의 자리까지 표시하는 역할, 소수점을 지정해 줄 수 없음.
area2.innerHTML += "소수점 셋째 자리에서 반올림 : " + Math.round(num2*100)/100 + "<br>";
area2.innerHTML += "소수점 셋째 자리에서 올림 : " + Math.ceil(num2*100)/100 + "<br>";
area2.innerHTML += "소수점 셋째 자리에서 내림 : " + Math.floor(num2*100)/100 + "<br>";
// 난수
area2.innerHTML += "임의의 난수 발생 : " + Math.random() + "<br>";
// 0 <= random < 1
area2.innerHTML += "(1 / 0) = " + (1 / 0)+ "<br>"; // Infinity
area2.innerHTML += Math.abs("abc")+ "<br>"; // NaN(Not a Number)
}
</script>
댓글남기기