자바 스크립트는 변수형이 전부 var로 선언된다.


이는 자바에서 Object 타입으로 생각하면 된다.


문자열, 숫자, 논리, 배열, 객체, 함수, 정의되지 않은 변수와 같이 있고


변수에 넣은 값에 따라서 자료형이 동적으로 바뀐다.


예제를 확인해보자


typeof는 변수와 함께 쓰여 변수가 어떤 자료형인지 출력한다.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	// 전역변수의 선언
	
	// 자동으로 window 객체의 필드가 됨
	str = "전역변수";
	// 브라우져 개발자 모드에서 조회 가능
	
	// 함수 외부에 선언한 변수는 var를 붙여도 전역변수이다.
	var str2 = "var전역변수";
	
	// window 객체가 로드 될 때 (페이지 로딩 시) 동작할 이벤트
	// 참고로 window 객체는 js의 최상의 객체로 페이지 로딩 시 같이 로드 된다. 
	window.onload = function(){
		// 지역변수 선언
		// 지역변수 선언시 반드시 var를 붙여야 한다.
		var str = "지역변수";
		
		// 지역변수가 우선권을 가진다.
		console.log(str);
		
		// window를 붙여 전역변수 호출
		console.log(window.str);
		console.log(this.str);
		// this는 여러가지 의미가 있지만 그 중 하나로 window 객체를 의미
		
		// 함수 내에서 작성되어도 var 키워드를 사용하지 않으면 전역변수가 된다.
		str3 = "난 뭘까요?";
		
		console.log(str3);
		console.log(window.str3);
		console.log(this.str3);
		
		what = "전역변수인지 확인"
		showwhat();
	}
	function showwhat() {
		console.log(what);
	}
</script>
<style>
	.area{
		border: 1px solid black;
		height: 150px;
	}
</style>
</head>
<body>
	<h1>변수와 자료형</h1>
	<h3>변수 선언</h3>
	<p>함수 내부에서 var 변수명; 으로 선언하면 지역변수가 된다.<br>
	함수 내부에서 변수명; 으로  선언하거나, 함수 밖에서 변수명; 혹은 var 변수명;으로
	선언하면 전역변수가 된다.<br>
	지역변수와 전역변수가 동일한 이름인 경우 함수 내부에서 변수명을 호출하면
	지역변수가 우선권을 가지기 때문에<br>
	전역변수 사용시 window.변수명 혹은 this.변수명으로 표현하여
	지역변수와 구분한다.<br>
	전역변수는 해당 window 내에서 어디든 사용할 수 있으며,
	지역변수는 해당 함수 내에서만 사용 가능하다.</p>
	
	<hr>
	
	<h3>자료형</h3>
	<p>자바스크립트에서는 자료형별로 변수 타입이 지정되지 않고
	리터럴에 의해서 동적으로 자료형이 결정된다.</p>
	<button onclick="testType()">자료형 테스트</button>
	
	<br><br>
	
	<div id="area1" class="area"></div>
	
	<script type="text/javascript">
		function testType() {
			// 문자열 변수
			var name = 'abcd';
			
			// 숫자 변수
			var age = 20;
			
			// 논리 변수
			var check = true;
			
			// 배열 변수
			var hobby = ["축구", "농구", "야구"];
			
			// 객체 변수
			var user = {name:"abcd", age:20, id:"user01"};
			
			// 함수 변수
			var testFunction = function testFunction(num1, num2){
									var sum = num1 + num2;
									
								}
			// 정의되지 않은 변수
			var apple;
			
			console.log(typeof(name) + " : " + name);
			console.log(typeof(age) + " : " + age);
			console.log(typeof(check) + " : " + check);
			console.log(typeof(hobby) + " : " + hobby);
			console.log(hobby);
			console.log(typeof(user) + " : " + user);
			console.log(user);
			console.log(typeof(testFunction) + " : " + testFunction);
			
			var area1 = document.getElementById("area1");
			
			area1.innerHTML += "배열 : " + hobby + "<br>";
			area1.innerHTML += "배열 인덱스[0] : " + hobby[0] + "<br>";
			area1.innerHTML += "배열 인덱스[1] : " + hobby[1] + "<br>";
			area1.innerHTML += "배열 인덱스[2] : " + hobby[2] + "<br>";
			area1.innerHTML += "객체 : " + user + "<br>";
			area1.innerHTML += "객체 속성 : " + user.name + ", " + user.age + ", " + user.id + "<br>";
			area1.innerHTML += "함수 : " + testFunction + "<br>"
			area1.innerHTML += "정의되지 않은 변수 : " + apple + "<br>"
			
			
		}
	</script>
	
	<hr>
	
	<h3>동적 타입 테스트</h3>
	<p>자바스크립트에서 변수는 타입이 지정되는 것이 아닌, 동적으로 타입이 결정된다.</p>
	<button onclick="testDynamicType();">실행확인</button>
	<div id="area2"></div>
	<script type="text/javascript">
		function testDynamicType() {
			// 들어온 값에 따른 type의 변화를 살펴보자
			var testVariable = 123;
			
			console.log(typeof(testVariable) + " : " + testVariable);
			
			testVariable = "안녕하세요";
			
			console.log(typeof(testVariable) + " : " + testVariable);
			
			testVariable = [0, 1, 2, 3];
			
			console.log(typeof(testVariable) + " : " + testVariable);
		}
	</script>
	
	
</body>
</html>


보통 태그에 접근하여 그 값을 사용하거나 속성을 변경할 때 이 방법을 이용하는데


변수를 선언하여 document.getElement~~~~ 와 같이 document의 메소드를 이용한다.



Id의 경우는                     var 변수 이름 = document.getElementById("지정한 Id");


태그를 이용할 땐              var 변수 이름 = document.getElementsByTagName("태그 명");


name을 이용할 땐            var 변수 이름 = document.getElementsByName("지정한 name 명");



태그를 이용하여 불러오면 그 태그를 사용하는 모든 항목들이 배열 형태로 변수에 입력된다.


이 변수를 출력하면 태그가 어떤 속성들을 가지고 있는지 확인할 수 있고


속성은 매우 많기 때문에 암기하여 쓰기 보다는 이 기능을 통해서 원하는 속성을 불러오거나 변경하면 된다.



다음 예제를 확인해보자



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	.area {
		border:1px solid red;
		height:100px;
	}
</style>
</head>
<body>
	<h1>HTML 태그에 접근하기</h1>
	<h3>아이디로 접근</h3>
	<div id="area1" class="area"></div>
	<!-- 보통 개발자가 id, 퍼블리셔가 class를 쓴다. -->
	<!-- id는 개발자들 끼리의 암묵적 약속으로 고유하게 단 하나의 대상만 가르킴 -->
	<button onclick="accessId();">아이디로 접근</button>
	<script>
		function accessId() {
			var area1 = document.getElementById("area1");

			area1.style.backgroundColor = "yellow";
			
			area1.innerHTML += "아이디로 접근 성공!<br>"
		}
	</script>
	
	<h3>태그명으로 접근</h3>
	<ul>
		<li>목록1</li>
		<li>목록2</li>
		<li>목록3</li>
		<li>목록4</li>
		<li>목록5</li>
	</ul>
	<button onclick="accessTagName();">태그명으로 접근</button>
	<script type="text/javascript">
		function accessTagName() {
			var list = document.getElementsByTagName("li");
			// li 태그는 여러개이기 때문에 getElements, s를 써서 복수형
			console.log(list);
			// F12의 브라우져 관리자 모드로 콘솔에 태그명 하나하나의 속성들을 확인하고
			// 이용해보자
			
			var changeColor = 50;
			
			/*
			for(var i in list){
				list[i].style.backgroundColor = "rgb(130, 220, " + changeColor + " )";
				changeColor += 50;
				
				// 이 반복을 사용하면 list 배열의 0~4번방의 li 값 뿐만 아니라  length라는 속성도 저장되어 있기 때문에
				// 마지막에 접근하려 하면 오류가 발생한다.
			}
			*/
			
			// 그러므로 일반 for문을 사용하여 해결해야 한다.
			for(var i = 0; i< list.length; i++){
				list[i].style.backgroundColor = "rgb(130, 220, " + changeColor + " )";
				changeColor += 50;
			}
		}
	</script>
	
	<hr>
	
	<h3>name으로 접근</h3>
	<form>
		<fieldset>
			<legend>취미</legend>
			<table>
				<tr>
					<td>
						<input type="checkbox" name="hobby" value="game" id="game">
						<label for="game">게임</label>
						<!-- for 속성을 맞춰서 설정하면 체크박스를 누르지 않고 글자를 눌러도 선택이 된다. -->
					</td>
					<td>
						<input type="checkbox" name="hobby" value="music" id="music">
						<label for="music">음악</label>
					</td>
					<td>
						<input type="checkbox" name="hobby" value="movie" id="movie">
						<label for="movie">영화</label>
					</td>
				</tr>
				<tr>
					<td>
						<input type="checkbox" name="hobby" value="money" id="money">
						<label for="money">돈벌기</label>
					</td>
					<td>
						<input type="checkbox" name="hobby" value="running" id="running">
						<label for="running">뛰기</label>
					</td>
					<td>
						<input type="checkbox" name="hobby" value="walk" id="walk">
						<label for="walk">걷기</label>
					</td>
				</tr>
			</table>
		</fieldset>
	</form>
	<div id="area2" class="area"></div>
	<button onclick="accessName();">name으로 접근</button>
	<script type="text/javascript">
		function accessName() {
			var hobby = document.getElementsByName("hobby");
			
			console.log(hobby);
			// 출력한 배열 값의 속성 중 checked가 현재 체크가 되어있는지 상태를 알려줌
			
			var checkItem = "";
			for(var i = 0; i < hobby.length; i++){
				if (hobby[i].checked == true) {
					checkItem += hobby[i].value + "선택함<br>";
				}
			}
			
			document.getElementById("area2").innerHTML = checkItem;
		}
	</script>
</body>
</html>


JS에서, <script> 블록에서는 주석을 자바와 같이 // 와 /**/ 를 이용한다.





document.write()의 경우는 기존의 HTML 문서를 지우고 새 HTML 빈 문서에 테스트를 할 때 쓰인다.


document.write("<h1>안녕 헤드라인!</h1>") 과 같이 쓰면 기존의 화면이 지워지고


안녕 헤드라인! h1 태그가 화면에 보여진다.


주로 테스트 할 때 사용하는 키워드이다.






inner HTML은 바디에 생성한 개체들의 내용을 읽거나 바꿀 때 사용한다.





console.log의 경우는 자바 이클립스에서 실행하면 코드 아래쪽의 실행창과 비슷하며


원하는 문구를 출력할 수 있고 오류같은 메시지도 볼 수 있다. f12의 개발자 모드 하단에서 찾을 수 있다.




다음은 예제이다.




javaScript02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	//한줄 주석입니다.
	/*
		여러줄 주석입니다.
	*/
	function start(){
		alert("문서가 로딩완료되었습니다.");
	}
	
</script>
<style>
	.area {
		width:300px;
		height:100px;
		border:1px solid black;
	}
</style>
</head>
<!-- <body onload="start();"> -->
<body>
	<h1>자바스크립트의 데이터 입/출력</h1>
	
	<script>
		// 웹페이지의 모든 내용이 로딘된 후에 실행되면, 로딩된 데이터를 지우고 출력하기 때문에
		// 주로 테스트 용도로만 사용한다.
		document.write("<h1>document.write()로 출력함</h1>");
	</script>
	
	<h3>inner HTML로 요소의 내용 변경하기</h3>
	
	<div id="area1" class="area">자바스크립트에서 태그 앨리먼트의 값을 읽어가거나,
	값을 변경할 때 inner HTML 속성을 사용한다.</div>
	<br>
	<button onclick="checkvalue();">innerHTML 확인</button>
	<script type="text/javascript">
		// text/javascript는 생략가능
		function checkvalue(){
			var area1 = document.getElementById("area1");
			alert(area1.innerHTML);
			console.log(area1.innerHTML);
			console.log(area1);
			
			area1.innerHTML = "innerHTML 속성으로 값 변경함";
		}
	</script>
	<hr>
	<h3>console.log()로 개발자 도구 콘솔 화면에 출력하기</h3>
	<p>개발자 도구 콘솔 화면에 출력을 하고자 할 때 사용하며,
	디버깅 할 때 주로 사용한다.</p>
	<button onclick="printConsole();">콘솔에 내용 출력</button>
	<script>
		function printConsole(){
			var num1 = 3;
			var num2 = 4;
			var sum = num1 + num2;
			
			window.console.log(sum);
			// window는 생략가능
		}
	</script>
	
	<hr>
	
	<h3>window.confirm()을 이용한 데이터 입력</h3>
	<p>어떤 질문에 대해 "예/아니오"의 결과를 얻을 때 사용한다.</p>
	<p>확인 버튼과 취소 버튼이 나타나며, 확인 버튼을 클릭시 true.
	취소 버튼을 클릭시 false를 리턴한다.</p>
	<button onclick="checkgender();">성별 확인하기</button>
	<div id="area2" class="area"></div>
	<script type="text/javascript">
		function checkgender() {
			var result = confirm("남자면 확인, 여자면 취소 버튼을 눌러주세요");
			
			console.log(result);
			
			var gender = "";
			
			if(result == true){
				gender = "남자";
			}else{
				gender = "여자";
			}
			
			console.log(gender);
			
			var area2 = document.getElementById("area2");
			area2.innerHTML += "당신은 " + gender + "입니다.<br>";
		}
	</script>
	
	<hr>
	
	<h3>window.prompt()를 이용한 데이터 입력</h3>
	<p>텍스트필드와 확인/취소 버튼이 있는 대화상자를 출력하고,
	입력한 메세지 내용을 리턴값으로 돌려받는다.</p>
	<button onclick="testPrompt();">이름 입력</button>
	<div id="area3" class="area"></div>
	<script>
		function testPrompt() {
			var result = window.prompt("당신의 이름은 무엇인가요?");
			
			var area3 = document.getElementById("area3");
			
			area3.innerHTML += "앗! 당신이 " + result + "군요! 반가워요!";
			
			
			
		}
	</script>
	
</body>
</html>


+ Recent posts