자바스트크립트 (JavaScriptBasic)
개요
역사
- 네스케이프의 라이브 커넥트 라는 서버측 기술에서 연동이 필요한 클라리언트측의 스크립트 언어였던 라이브스크립트에서 부터 시작
- 네스케이프사 가 SUN사와의 제휴로 이름이 자바스트립트로 변경하고 HTML 보완 언어로 발표(1995년)
- MS의 독자적 J스크립트 발표등 통일되지 않은 스펙과 호환성 문제 발생
- 네스케이프사가 1996년 자바스크립트 스펙을 ECMA국제회의에 제출 , 첫 버전 ECMA-262 발표.
- 지금은 ECMA-262 세 번째 버전이 나와 있으며 이를 기반으로 한 자바 스크립트 1.6이 대부분 브라우저에서 지원되고 있다.
Hello World
[실습1] Hello World
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello World</title>
<script type="text/javascript">
document.write( "Hello World" );
</script>
</head>
<body>
</body>
</html>
- document.write( "Hello World" ) 대신 alert( "Hello World" ) 로 바꾸고 브라우저에서 확인 해 보세요.
실행과 특징
- 브라우저 내에 내장된 자바스크립트 실행엔진 (해석기)를 통해 실행되어지고 브라우저 화면에 반영된다.
- 객체지향이라기 보다는 객체 기반 스크립트 언어
- 객체를 생성하느 클래스 개념은 지원하고 있지 않지만 prototype 이라는 객체 생성 지원 개념이 있다.
- HTML 문서 내에서 자바스크립트 사용하기
보통 헤드안에 삽입되어 실행 되나 본문 어디에도 삽입되어 실행될 수 있다
HTML 문서 내에서 자바스크립트 사용하기
<html>
<head>
<script type="text/javascript" src="hello.js"></script>
</head>
<body>
...
</body>
</html>
- 외부 파일를 불러서 실행할 수 있다 ( 보통 이방식으로 자바스크립트를 실행하고 관리한다 )
[실습2] 실습1를 외부파일에서 불러와 실행 시키는 방식으로 수정하고 확인해 보세요.
기본 문법
변수 와 데이터 타입
기본 데이터 타입
- Number, String, Boolean
<script type="text/javascript">
var number = 5
var anotherNumber = new Number(5)
var pi = 3.14
var string = "Hello, I'm a string!"
var anotherString = new String( "Hello, I'm a string!" );
var used = false;
alert( typeof number)
alert( typeof anotherNumber )
alert( typeof pi )
alert( typeof string )
alert( typeof anotherString )
alert( typeof used )
</script>
- null 과 undefined
<script type="text/javascript">
var myVar, myVar2 = null;
alert( myVar + ", " + myVar2 );
alert( myVar == myVar2 );
alert( myVar === myVar2 );
</script>
변수 이름 규칙
변수의 이름은 알파벳(대문자 A ~ Z, 소문자 a ~ z), 밑줄(_)이나 달라($)로 시작될 수 있으며, 다음에는 알파벳, 밑줄, 달라 기호에 추가로 숫자(0 ~ 9)까지 사용할 수 있다.
선언없이 대입시에 변수 타입이 결정된다.
<script type="text/javascript">
v = "This is Test";
alert( typeof v );
v = 20;
alert( typeof v );
</script>
변수 범위
<script type="text/javascript">
function func(){
v1 = "hello javascript";
}
func();
alert( v1 );
</script>
구문
세미콜론을 반드시 구문끝에 붙혀야 하는 것은 아니다.
<script type="text/javascript">
var str = "This is Test"
document.write( str )
</script>
한 줄로 붙혀 쓸 수는 없다.
<script type="text/javascript">
var str = "This is Test" document.write( str )
</script>
엔진이 한줄 씩 일거나 ;(세미콜론) 으로 분리된 구문을 읽어 해석해 나가기때문에 문장사이에는 \n(개행) 이나 ;(세미콜론) 으로 분리
자바와 마찬가지로 Camel 표기법이 기본
<script type="text/javascript">
//// CamelCase is the norm
if(fooBar == bazBat) {}
</script>
객체 속성, 메서드에 접근 할 때에는 . 으로 접근한다.
<script type="text/javascript">
someObject.someMethod();
</script>
주석은 한줄 주석 // , 여러줄 주석 /* */ 모두 가능하다.
조건문
If문, Ifelse, ifelse if 등의 조건문은 다른 언어들과 다르지 않다.
<script type="text/javascript">
var something = false;
if( something ) doSomething();
</script>
<script type="text/javascript">
if(something == foobar) {
alert("equals foobar!");
} else if(something == bazbat) {
alert("equals bazbat!");
} else {
alert("equals neither!");
}
</script>
Switch 문도 사용이 가능하다.
<script type="text/javascript">
switch( something ) {
case "foobar":
// if something == "foobar"
alert( "foobar!" );
break
case "barfoo":
// if something == "barfoo"
alert("Barfoo!");
break
case "fallthru":
// without a break, results will cascade
// the result? [alert] Falling through...
// [alert] fallen through
alert("Falling through...");
case "fellthru":
alert("fallen through.");
break
default:
// if there is no case "*" match, execute this code
alert("Case not found... here's a default")
}
</script>
반복문
for, while, do~while 문도 다른 언어들과 틀리지 않다.
<script type="text/javascript">
for(var i = 0; i < 3; i++) {
document.write( I + "<br>" );
}
</script>
객체
정의 / 생성
정보를 관리하기 위해 의미를 부여하고 분류하는 논리적 단위
클래스의 인스탄스(instance) -> 구체화, 실체화
[실습 5] 객체의 생성
var employee1 = new Object();
employee1.name = "홍길동";
employee1.title = "과장";
employee1.showInfo = function() {
document.write( "이름 : " + this.name );
document.write( "<br>" );
document.write( "직책 : " + this.title );
}
employee1.showInfo();
JSON ( JavaScript Object Notation )
자바스크립트에 객체생성을 위한 표기하는 방법
어떤 객체던지 표기할 수 있고 바로 생성가능
[실습 6 - 1] 객체의 생성
var employee1 = {};
employee1.name = "홍길동";
employee1.title = "과장";
employee1.showInfo = function() {
document.write( "이름 : " + this.name );
document.write( "<br>" );
document.write( "직책 : " + this.title );
}
employee1.showInfo();
[실습 6 - 2] 객체의 생성(JSON)
var employee1 = {
name: "홍길동",
title: "과장",
showInfo: function() {
document.write( "이름 : " + this.name );
document.write( "<br>" );
document.write( "직책 : " + this.title );
}
}
employee1.showInfo();
alert( employee1.name + " " + employee1.title );
[실습 6 - 3] 객체의 생성(JSON) – 코마 사용에 조심
var foo = {
name:"bar",
nick:"buzz"
aNumber:5,
doStuff:function() {
alert( "I'm" + this.name );
},
}
어디에서 에러가 있는 지 찾고 바르게 수정 해 보세요.
생성자 사용
var Foo = function() {
this.name = "bar";
this.nick = "buzz";
this.aNumber = 5;
this.doFoo = function() {
alert( "I'm " + this.name );
};
}
var foo = new Foo();
foo.doFoo();
prototype 기반의 상속을 통해 객체지향 구현 ( 속성, 함수 공유 )
var Foo = function( name, nick ) {
this.name = name;
this.nick = nick;
}
Foo.prototype.aNumber = 5;
Foo.prototype.doFoo = function() {
alert( "I'm " + this.name );
};
var foo1 = new Foo( "foo1", "nick1" );
foo1.doFoo();
var foo2 = new Foo( "foo2", "nick2" );
foo2.doFoo();
prototype 기반의 상속
내장 객체 Array
배열생성
- var a = new Array(10);
- var a = new Array();
- var a = new Array( 1, "ABC", true) ;
배열 생성 (리터럴)
var a = [];
length 속성 : 배열의 size을 담고 있눈 속성
배열과 객체의 관계 - 속성 접근시 실습예제와 같이 배열처럼 접근할 수 있다
[ 실습예제 6-8 ]
var employee1 = {
name: "홍길동",
title: "과장"
}
alert( employee1["name"] + " " + employee1["title"] );
주요함수
주요 함수 예제
var hege = [ "Cecilie", "Lone" ];var stale = [ "Emil", "Tobias", "Linus" ];var children = hege.concat( stale );
console.log( children );
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join();
console.log( energy );
var fruits = [ "Banana", "Orange", "Apple", "Mango" ];
fruits.push( "Kiwi" );
console.log( fruits );
console.log( fruits.pop() );
console.log( fruits.pop() );
console.log( fruits );
var fruits = [ "Banana", "Orange", "Apple", "Mango" ];
fruits.reverse();
console.log( fruits );
fruits.shift();
console.log( fruits );
var citrus = fruits.slice(1, 3);
console.log( citrus );
fruits.sort();
console.log( fruits );
내장 객체 String
배열처럼 다룰 수 있다.
[예제 6- 9 ] 문자열을 배열처럼 접근해서 사용하는 예제 입니다. IE에서 잘 작동하는 지 확인해 보고 잘 작동하도록 수정해 보세요.
var str = "Hello, I'm a string!";
console.log( "문자열 길이는 : " + str.length );
for(var i = 0; i < str.length; i++) {
console.log( str[i] );
}
합치기 와 자동 형 변환
[예제 6- 10 ] 문자열 합치기 예와 그 때, 자동 변환되는 경우들을 확인해 보세요.
console.log( "첫 번째 문자열 " + " 두 번째 문자열" );
var str = "number " + 5;
console.log( str + " : " + typeof( str ) );
str = 5 + "5";
console.log( str + " : " + typeof( str ) );
[ 예제 6- 11 ] 주요함수 사용 예 1
var str = "string1 string2 string3“
alert( str.length );
var start = str.indexOf( 'string2' );
alert( start );
alert( str.substr( start ) );
// 간단히,
alert( str.substr( str.indexOf( 'string2' ) );
// str은 변하지 않는다.
alert( str );
[ 예제 6- 12 ] 주요함수 사용 예 2
var str = "string1 string2 string3“
// 배열로 분리한다.
var a = string.split(' ');
// 배열을 확인하는 코드를 직접 작성해 보세요.
[ 예제 6- 13 ] Escaping HTML, URLs, etc.
//에러
"<h3>Here's a headline!</h3>".escape();
// escape 함수는 전역함수로 제공
var escaped = escape("<h3>Here's a headline!</h3>");
var unescaped = unescape(escaped);
// URL 엔코딩
var url = "http://mysite.com/?stuff=\"안 대혁!&bar=";
var encodedURL = encodeURI(url);
var decodedURL = decodeURI(encodedURL);
내장 객체 Date
Date객체는 날짜와 시간을 다루는 객체이다.
기본 사용법
var d = new Date(); // 현재 시간
document.write( d );
[예제 6-14]
- 다음 Date객체 생성자를 사용해 Date 객체를 생성하고 document.write 를 이용해 결과를 확인해 보세요.
1) Date( year, month, day )
2) Date( yyyy, mm, dd, hh, mi, ss)
3) Date( milliseconds )
관련함수
[ 실습예제 6-15 ] Date 객체 함수 사용
var d = new Date(2013, 0, 28); //2013 년 1월 28일
document.write(
" 년도: " + (d.getYear() + 1900) + "<BR>" +
" 월: " + (d.getMonth() + 1) + "<BR>" +
" 일은: " + d.getDate() + "<BR>" +
" 요일은: " + d.getDay() + "<BR>" +
" 시는: " + d.getHours() + "<BR>" +
" 분은: " + d.getMinutes() + "<BR>" +
" 초는: " + d.getSeconds() + "<BR>" +
" 밀리초: " + d.getMilliseconds() + "<HR>" );
d.setYear(2014); // 2014년 세팅
document.write(d + "<HR>");
d.setMonth( 11 ); // 12월 세팅
document.write(d + "<HR>");
내장 객체 Function
함수도 객체로 간주
함수 생성 방식
1) var sum = new Function( “a”, “b”, “return a+ b” );
2)
function sum ( a, b ) {
return a+b;
}
3)
var sum = function( a, b ) {
return a+ b;
}
함수 argument
[실습예제 6-16 ] 함수의 argument는 값과 객체뿐만 아니라 함수도 될 수 있음을 다음 예제로 확인해 보세요.
function myFunction( arg1, arg2, arg3 ) {
// 값
alert("I have an argument! " + arg1);
// 객체
alert(arg2.bar);
// 함수
arg3();
}
myFunction( "foo", { bar: "baz" }, function(){ alert("Victory!")} );
[실습예제 6-16 ] 함수의 argument로 함수가 넘어 갈 경우 함수의 본문이 길어 질 경우,
var f = function() {
alert( "victory!" );
}
myFunction( "foo", { bar: "baz" }, f );
[실습예제 6-16 ] 함수의 argument는 함수내부에서 argument객체로 참조할 수 있다.
function myFunction() {
// 값
alert("I have an argument! " + arguments[0] );
// 객체
alert( arguments[1].bar );
// 함수
arguments[2]();
}
이벤트
HTML DOM은 다음과 같은 javascript 가 이벤트에 반응할 수 있도록 하고 있다.
- 사용자의 마우스 클릭
- 웹 페이지의 로딩 완료 되었을 때
- 이미지가 로딩 되었을 때
- HTML element에 마우스가 움직이거나 오버되었을 때
- Input 필드가 변경 되었을 때
- HTML form 이 submit 될 때
- 사용자의 key 누름
이벤트에 대한 반응 처리 ( HTML Event Attribute 에 javascript 를 추가한다 )
onclick = JavaScript
[ 실습예제 6 – 17 ]
<!DOCTYPE html>
<html>
<body>
<h1 onclick="this.innerHTML='Ooops!'">Click on this text!</h1>
</body>
</html>
- 이벤트를 처리할 수 있는 함수 ( Event Handler )로 처리할 수 있다.
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function changetext(id){
id.innerHTML="Ooops!";
}
</script>
</head>
<body>
<h1 onclick="changetext(this)">Click on this text!</h1>
</body>
</html>
HTML Element 에 이벤트를 매핑할 때는 이벤트속성(Event Attribute)을 사용
[ 실습예제 6–18 ]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function displayDate(){
document.getElementById("demo").innerHTML = Date();
}
</script>
</head>
<body>
<p>버튼을 클릭하면 <em>displayDate()</em> 함수가 실행 됩니다.</p>
<button onclick="displayDate()">Try it</button>
<p id="demo"></p>
</body>
</html>
- 마우스 오버 : onmouseover , onclick 반응과 같도록 같은 이벤트 핸들러를 사용합니다.
- 마우스 아웃 : onmouseout ,날짜가 사라지게끔 이벤트 핸들러를 새로 추가합니다.
자바스크립트로 특정 Element 이벤트 매핑하기
[ 실습예제 6 – 20 ]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
document.getElementById("myBtn").onclick = function(){
displayDate()
};
function displayDate(){
document.getElementById("demo").innerHTML = Date();
}
</script>
</head>
<body>
<p>버튼을 클릭하면 <em>displayDate()</em> 함수가 실행 됩니다.</p>
<button id="myBtn">Try it</button>
<p id="demo"></p>
</body>
</html>
onload 는 사용자가 특정 페이지에 입장 했을 때 발생한다.
반대로 onunload 가 특정 페이지를 떠나면 발생한다.
onload에서 페이지의 최초작업 초기화 작업을 할 수 있을 것이다.
[ 실습예제 6 – 22 ]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function checkCookies() {
if( navigator.cookieEnabled==true ){
alert("쿠키를 사용할 수 있습니다.")
} else {
alert("쿠키를 사용할 수 없습니다.")
}
}
</script>
</head>
<body onload="checkCookies()">
<p>브라우저에서 쿠키 사용여부를 어떻게 설정했는 지 알수 있습니다.</p>
</body>
</html>
[ 실습예제 6 – 23 ]BrowserDetect 객체를 사용해서 페이지에 방문하는 사용자의 브라우저 종류, 버전 그리고 OS를 알아 내는 코드를 onload 이벤트 핸들러에 추가해 보세요.
[참고]
<javascript type=“text/javascript” src=“browser-detect.js”></script>
onchange 는 Input , select 값이 변하면 발생한다.
[ 실습예제 6 – 24 ]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function myFunction() {
var x=document.getElementById("fname");
x.value=x.value.toUpperCase();
}
</head>
<body>
아이디 입력: <input type="text" id="fname" onchange="myFunction()">
<p>INPUT에 포커스가 없어지면, 이전 값이 변했는 지 판단해서 항상 대문자로 만드는 예제입니다.</p>
</body>
</html>
onmousedown, onmouseup 그리고 onclick
[ 실습예제 6 – 25 ]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function mDown( obj ) {
obj.style.backgroundColor="#1ec5e5";
obj.innerHTML="버튼을 떼주세요.";
}
function mUp( obj ) {
obj.style.backgroundColor="#D94A38";
obj.innerHTML="클릭하세요!";
}
</script>
</head>
<body>
<div onmousedown="mDown(this)" onmouseup="mUp(this)" style="background-color:#D94A38;width:90px;height:20px;padding:40px;">클릭하세요!</div>
</body>
</html>
[과제]
더 많은 이벤트 예제들은 다음 페이지에서 참고할 수 있습니다.
HTML DOM Events
http://www.w3schools.com/jsref/dom_obj_event.asp
이 문서에서
Mouse Event,
Keyboard Event,
Form Event
의 예제들을 확인해 보세요
'Dev > JavaScript' 카테고리의 다른 글
jQuery 기초 배우기 (Javascript) (0) | 2021.10.25 |
---|---|
줌 클론코딩(WebSockets, SocketIO, WebRTC ) (0) | 2021.10.04 |