JAVA를 잡아라!...

JavaScript_개념 본문

Front

JavaScript_개념

onivv 2024. 1. 3. 15:24

[ JavaScript ]

  • 웹 개발에서 가장 널리 사용되는 프로그래밍 언어 중 하나 (Java랑 아무 상관없음)
  • HTML과 CSS와 함께 웹 개발의 기본적인 요소 중 하나
    • HTML(구조) + CSS(디자인) + JS(동작)
    • 웹 페이지를 특정 상황(event)에 따라 동적으로 만들고 상호작용을 구현
  • JS는 웹 브라우저에서 시행되며, 사용자와 상호작용하고 웹 페이지의 내용을 변경하고 업데이트하는데 사용
    • ex) 웹 페이지 폼 유효성 검사, 애니메이션 효과 추가, 사용자 입력 처리, 데이터 가져오기, ...

입출력

  • document.write() : 사용자에게 보여지는 메소드
  • console.log() : 개발자에게 보여지는 메소드 (라인마다 띄어주면서 자료형, 값 확인)
    • typeof : 콘솔창에서 자료형을 볼 수 있음
  • prompt(사용자에게 입력받는 창), confirm(T/F), alert(알림창)

변수 선언

  • script : 동적 타이핑 언어, 상황에 따라 자기 맘대로 타입이 변함,  타입 var로 통일
  • undefined : JS에서 정의하지 않은 값을 화면에 출력하면 나오는 값 (0, null, error 안나오고 걍 undefined...)
  • 연산자 : 웹은 거의 모든 데이터를 문자열로 취급해 (==) 이런 비교연산자가 유리할 수 있지만, 자료형 구분하면서 정확하게 하려면 (===) 사용하기!

함수

  • 선언 함수
    • 함수를 선언한 이후에 호출해서 사용
    • 어떠한 기능을 여러번 사용할 목적으로 선언 함수 사용
    • function test(인자) {return 아웃풋}
  • 익명 함수
    • 함수에게 이름이 없는 함수
    • 변수에 저장하고 변수를 호출해서 사용
    • 변수에 함수, 배열, 객체, ... 모든걸 담을 수 있음
  • 내장 함수(메서드) ex)
    • charAt(n) : n번 index의 값
    • indexOf('문자') : 문자가 어디있니?
    • lastIndexOf('문자') : 마지막 문자가 어디있니?
    • substring() : 오버로딩된 함수, 문자열 잘라주는 함수
    • split(), replace(), toUpperCase(), ...
  • 내장 객체
    • 위에서 내장 객체 String의 메서드를 사용중
    • Math : 주로 랜덤값을 생성할 때에 활용됨
    • Date : 날짜와 관련된 작업을 수행할 때에 활용됨

이벤트★

  • script로 하는 독특한 것...!!!! 이벤트 등록
  • 예시코드 6, 7 참조!!

예시1

  • <script> 태그 : 나 스크립트 쓸건데 외부에서 가져올거야
  • <>태그바디</> 없으면 : </> 이거만 써줘도 되는데 script는 열어서 사용하는게 보편적

test01.html

.html 파일에서는 <script><script/> 태그 사용 oo

<script>
	document.write('자바스크립트 시작');
</script>

---------------------------------------------

<script src='js/test01.js'></script>

 

test01.js

.js 파일에서는 <태그> 사용 xx (js폴더를 만들어서 따로 보관)

document.write('외부 스크립트 적용');

예시2

test02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script>
	console.log('브라우저의 콘솔을 사용하는 JS');
	
	var num1=10;
	var num2=20;
	var num3=num1+num2;
	console.log('num3= '+num3);
	
	var ans1=prompt('입력하세요!');
	console.log('ans1 ='+ans1);
	var ans2=confirm('YES or NO ?');
	console.log('ans2 ='+ans2);
	alert('알림창');	

	var res;
	console.log('result ='+res);
	
	var a=9;
	var b='9';
	console.log('a == b');
	console.log(a==b);
	console.log('a === b');
	console.log(a===b);
</script>

</body>
</html>

예시3

문제

더보기

사용자에게 나이를 입력받아주세요!
1살~120살 입력가능합니다!
 범위 밖의 입력을 하면 재입력 ㄱㄱ
1~8살 까지는 0원
9~19살 까지는 1200원
20살~65살 까지는 2000원
66~120살 까지는 0원

이라고 HTML 화면에 출력해주세요! :D

test03.js >> 처음 내가한 풀이 ㅂㄹ야

var ans=prompt('나이를 입력하세요');
console.log(ans);
while(ans<1||ans>120){
	alert('1살~120살 입력가능합니다!')
	ans=prompt('나이를 입력하세요');
	console.log(ans);
	continue;
}

if(9<=ans&&ans<=19){
	 document.write('1200원');
	 console.log('9~19 ?'+ans)	
}
else if(20<=ans&&ans<=65){
	document.write('2000원');
	console.log('20~65 ?'+ans)
}
else{
	document.write('0원');
	console.log('그외니 ?'+ans)
}

 

test03.js >> 모범 답안!!

기능별로 분할해서 코드를 작성하자

  1. while() 입력받는 부분, 유효성 검사
  2. if() 결과 확인
  3. 출력 부분
while(true){
	var ans=prompt('나이를 입력하세요.');
	console.log('ans의 자료형 : '+typeof ans);
	if(0<ans && ans<=120){
		break;
	}
	alert('1~120 사이의 값으로 입력하세요!');
}
var money=0;
if(8<ans && ans<20){
	money=1200;
}
else if(20<=ans && ans<=65){
	money=2000;
}
document.write(money+'원입니다.');

 

test03.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script src = 'js/test03.js'></script>
</body>
</html>

예시4

test04.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- 선언 함수 -->
<script>
	function test(a,b){
		console.log('a= '+a);
		console.log('b= '+b);
		return a+b;
	};
	test(100,200);
	document.write(test(100,200));
</script>


<!-- 익명 함수 -->
<script>
	var func=function(){
		var a=1;
		var b=2;
		console.log(a+b);
	};
	func();
</script>

<!-- 내장 함수(메서드) -->
<script>
	var str='banana';
	console.log(str.charAt(0));
	console.log(str.indexOf('a'));
	console.log(str.lastIndexOf('a'));
	console.log(str.substring(1,3));
	console.log(str.replace('a', 'A'));
	console.log(str.toUpperCase());
</script>

</body>
</html>

예시5

문제

더보기

1~100사이의 정수중에서
랜덤값을 생성해주세요!

77
1~100 UP? DOWN?
   50
UP
51~100
   80
DOWN
51~79
   77
정답입니다! :D

심화 1) N번만에 맞추셨습니다! :D
심화 2) 51~79
   85 >> ? 다시
심화 3) 정수만 입력받게해주세요!~~

test05.js >> 처음 내가한 풀이 ㅂㄹ야

기능별로 분할해서 코드를 작성하자

  1. 랜덤 생성
  2. 유효성 검사 (정수만 입력, 올바른 범위)
  3. 결과 확인
  4. 출력 부분
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>문제풀이</title>
</head>
<body>
   <script>
      var randNum=Math.floor(Math.random() * 100) + 1;

      var MIN=1;
      var MAX=100;
      var cnt=0;
      while(true){
         var ansNum=prompt(MIN+'~'+MAX+' UP? DOWN?');
         if(isNaN(ansNum)){
            alert('정수만 입력해주세요!~~');
            continue;
         }
         if(ansNum<MIN || MAX<ansNum){
            alert('????? 다시 ㄱㄱ');
            continue;
         }
      
         ansNum=parseInt(ansNum);
         cnt++;
         if(randNum==ansNum){
            break;
         }
         else if(randNum<ansNum){
            alert('DOWN');
            MAX=ansNum-1;
         }
         else{
            alert('UP');
            MIN=ansNum+1;
         }
      }
      
      document.write("정답입니다! :D <br>");
      document.write(cnt+"번만에 맞추셨습니다! :D");
   </script>
</body>
</html>

예시6_이벤트 등록

  • JS에서는 함수도 하나의 자료형으로 취급해서 선언해놓은 함수를 대입할 수 있음
  • window.onload : 화면에 모든 요소를 적재한 다음 수행! 아래코드 요소를 모두 담고 코드 수행
  • .getElementByID() : 아이디 있을때 사용
  • .querySelector() : 아이디 없을 때 사용, 첫번째 요소만 적용
  • .querySelectorAll() : 아이디 없을 때 사용, 모든 요소 적용
  • background-color : script에서는 하이푼을 사용하지 않음(연산자랑 헷갈려서)
  • backgroundColor : script에서는 카멜법 ㄱㄱ

한글코딩

페이지가 화면에 로딩됐을때, 이벤트(함수)하나 등록할테니 수행해줄래?
	document문서에 id이름이 box인 요소하나 있으니 받아와줘 > 받아서 box에 저장
	이 box클릭했을때, 이벤트(함수)하나 수행해줄래?
		이벤트 등록 알람창 띄우고
		확인 누르면 네이버 홈페이지창 연결해줘
	document문서에 box1아이디아래 ul아래 li 요소 있으니 받아와줘 > 받아서 list에 저장
	list에 style이 있는데 그 안에 backgroundColor가 있어~
	단, querySelectorAll은 받아올때 여러개 받아오니까 for문으로 list개수만큼 돌려서 적용해

 

test06.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>이벤트 등록 01</title>

<style>
	#box{
		background-color: lightcoral;
		cursor: pointer;
		width: 50px;
	}
</style>

</head>
<body>

<script>
	window.onload = function(){
		var box=document.getElementById('box');
		box.onclick = function(){
			alert('이벤트 등록');
			window.open('https://www.naver.com/');
		};
		
		var list=document.querySelectorAll('#box1 > ul > li');
		list[0].style.backgroundColor = 'lightblue';
		list[1].style.backgroundColor = 'lightblue';
		
	};
</script>

<div id="box">클릭</div>

<hr>

<div id="box1">
	<ul>
		<li>베스트상품</li>
		<li>신상품</li>
	</ul>
</div>
<div id="box2">
	<ul>
		<li>후드티</li>
		<li>반팔티</li>
		<li>운동화</li>
	</ul>
</div>

</body>
</html>

예시7

  • addEventListner('load', 함수명)
    • 요소를 생성하는 함수를 만든 후 >> id가 있는 버튼을 받아와서 이벤트를 실행
    • 화면이 로드되면 내가 선언했던 함수를 수행해줘!

한글코딩

document의 joinForm(이름속성name=btn)에 제출버튼을 누르면 addElem()함수하나 수행할래?
	document에 <div>요소 추가해서 변수 div에 담아
	document에 <a>요소 추가해서 변수 a에 담아
	document에 링크_텍스트노드(문자) 추가해서 변수 txt에 담아
		<a>의 자식으로 txt링크 추가해
		<a>의 href속성, 내용은'http://www.naver.com/' 넣어
	<div>의 자식으로 <a>추가해
	document의 body에 자식으로 <div> 추가해

	bnt를 누르면 func수행하게 할거야

페이지가 로드되면 addElem()함수 수행해줘
-----------------------------------------------------------
<body>
<div>
<a href="http://www.naver.com/">링크<a/>
<div/>
<body/>

 

test07.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>이벤트 등록 02</title>

<style>
	div{
		width: 50px;
		height: 50px;
		background-color: red;
	}
</style>

</head>
<body>

<script>
	function addElem(){
		var btn=document.getElementById('btn');
		
		function func(){
			var div=document.createElement('div');
			
			var a=documnet.createElement('a');
			var txt=document.createTextNode('링크');
			a.appendChild(txt);
			a.setAttribute('href', 'https://www.naver.com/');
			
			div.appendChild(a);
			
			document.body.appendChild(div);
		}
		
		btn.onclick = func;
		console.log('확인');
	}
	addEventListener('load', addElem);
</script>


<button id="btn">버튼을 누르면 요소를 생성합니다.</button>

</body>
</html>

 

'Front' 카테고리의 다른 글

비동기 처리_ID 중복검사  (0) 2024.01.15
비동기 처리_개념  (0) 2024.01.15
JavaScript_회원가입 폼 만들기  (1) 2024.01.04
HTML, CSS_NAVER 로그인 페이지_(진행중...)  (0) 2024.01.02
HTML_개념  (1) 2023.12.27