사진과코딩
[JavaScript] 이론, Test 본문
JavaScript
JavaScript : Front-End 언어, Client code(script), 절차지향적언어
기본타입 : String, Number, Boolean, Undefined
발전 : JavaScript -> XML -> JSON
사용 목적
1. 유효성 검사(서버에서 유효성 검사를 할 경우 사용자가 많으 서버에 부담이 됨)
2. tag를 접근하기 위한 script
3. 화면을 제어하기 위한 요소(동적 처리)
4. complie을 하지 않는다(소스 -> 기계어 변환X) -> 처리가 가볍다
변수 정리
- var = 권장X, 위치에 상관없이, 타입에 상관없이 선언 가능, 동일 이름으로 충복선언(2개이상)가능 => 충돌 가능성 UP
- let = 권장O, 타입에 상관없이 선언 가능, 1개만 선언가능, 형변환없이 형태, 값을 바꿀 수 있다. => 충돌 확률 DOWN
- const = 상수 선언, 선언 후 변경 불가능, 상수인 걸 표기하위해 대문자로 변수명을 설정하는 경우가 많다.
- ex
let nnumber=246;
const nnumber = 346;
nnumber=246; // 오류 발생, 상수라서 변경 불가
let cars = ["volvo","bmw","benz"]; // 크기 4, 마지막에 cars의 배열 크기를 담은 length(readonly)가 포함되어 크기는 4이다.
alert('내용') // 경고창, 최근에는 사용자에 요구에 따라 잘 사용하지 않고 페이지에 오류를 표시한다.
prompt("내용","초기값") // 간단한 입력창
함수정리
- 선언 : window.onload() 이후에 실행되도록 선언 or 필요한 태그 이후에 script 선언 or onclick 같은 function은 이미 선언해도 상관 X , 대소문자 구분 O
- 설정법
- 1. 내장함수 <button onclick="alert()">
- 2. 사용자정의함수 <button onclick="checkPassword()">
- 콜백 함수 : 함수의 파라미터로서 다른 함수에 전달하고 감싼 함수의 내부에서 그 함수를 호출
document.querySelector(선택자) //tag이름, #id, .class
document.querySelectorALL(선택자)
document.getElementById() // 태그 전체를 들고와서 필요한 값이 있을 때는 .을 통해 확장해줘야 한다.
let obj = { //json key : value
firstname : "sc",
lastname :"k",
age : 26,
print:function(){
console.log(this.lastname+this.firstname);
// this를 안 붙이면 funtion 내에 있는 lastname,firstname을 호출한다
};
}
console.log(obj.age);
let getAge = obj.age;
getAge.parseInt() // int형으로 변형
console.log(print);//this가 없으면 에러가 뜬다=> function에 선안된 lastname, firstname이 없어서
class Person{
constructor(name,age){ //생성자
this.name = name;
this.age = age;
}
printing(){
console.log(this.name,this.age);
console.log(`${this.name}`,`${this.age}`);
}
}
let person = new Person("ksc",22);
person.printing();
// Array=ArrayList=LinkedList, Object 타입
// Date(날짜)
let date = new Date(); //Date 현재 날짜
let date2 = new Date("2024-05-03");
// month가 0~11이어서 +1해줘야 정확한 달이 나온다.
console.log(date.getFullYear(),date.getMonth()+1,date.getDate(),date.getDay());
console.log(date.getHours(),date.getMinutes(),date.getSeconds());
//이번달의 마지막 날짜 확인하는 방법
console.log(date);
date.setMonth(date.getMonth()+1);
date.setDate(0); //0= 전달의 마지막일, 1= 이번달의 첫 날
console.log(date.getDate()); //이번달의 마지막 날짜 출력
// Map(key,value) xml = > tag+String, key 값은 보통 영어 사용
let map = new Map();
// insert
map.set("apple","사과");
map.set("가격",2500);
map.set("수량",3); // 다른 타입이 들어가도 상관 없다.
// {
// "apple": "사과",
// "가격" : 2500,
// "수랑" : 3
// }
// size
console.log(map.size); //3
// select -> key를 통해 value를 구할 수 있다.
console.log(map.get("가격")); //2500 출력
console.log(map.get("color")); //undefined 출력
if(map.get("color") ==undefined){ // 없는 key일 경우 ""가 아닌 undefind 타입으로 비교해야한다.
console.log("result");
}
// delete
map.delete("수량");
console.log(map.get("수량")); //undefind console은 출력
// 존재여부
console.log(map.has("가격"));//key가 있으면 true, 없으면 false
// for
for(let key of map.keys()){ console.log(map.get(key));}
//forEach
map.forEach(function(item,index){ console.log(item,index);})
map.forEach((item,index)=>{ console.log(item,index) }) //둘은 같은 의미이다.
// key값만
console.log(map.keys());
// value값만
console.log(map.values())
// Set(중복을 허용하지 않는 집합)
let set = new Set();
set.add("t");
set.add("s");
set.add("g");
set.forEach((item,index)=>{
console.log(item);
})
//document = 문서 자체 (내장 객체)
console.log(document.body.innerHTML); // 현재 document의 body 태그의 모든 내용 가져오기
console.log(document.documentElement.innerHTML) // 현재 document의 모든 html의 내용 가져오기
let arrp = document.getElementsByTagName("p"); // 모든 p 태그 | getElementsByTagName 모든 태그(배열) , getElementByTagName 태그 하나만
console.log(arrp[2].innerHTML);
arrp[1].innerHTML="변경하고 싶은 내용"; // 값 변경
document.getElementById("hobby").value="사진찍기"; // 값 변경
//location = 주소 (내장 객체)
location.herf = www.naver.com //주소창이 www.naver.com으로 바뀐다.
BootStrap
//Bootstrap URL 형식으로 지정 연결
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<input type="text" id="commmentInPut" class="form-control" placeholder="댓글을 입력하세요">
<button class="btn btn-primary" onclick="addComment()">댓글달기</button>
Test
문제 1 : Id값이 설정된 값과 같은지 확인 및 주소 연결
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
function checkId(){
let id = document.getElementById("userId").value;
if(id=="root"){
let result = document.getElementById("result");
document.getElementById("result").innerHTML="<span style='color : red'>아이디 성공</span>";
}
else{
document.getElementById("result").innerHTML="<span style='color : black'>아이디 실패</span>";
}
};
</script>
<script>
function find(){
let find_val=document.getElementsByTagName("input")[2].value;
if(find_val.trim()==''){
alert('검색어를 입력해 주세요');
}
else{
location.href = "https://kin.naver.com/search/list.naver?query="+find_val;
}
}
</script>
</head>
<body>
아이디 <input type="text" value="root" placeholder="아이디를 입력하세요" id="userId">
<input type="button" class="btn btn-primary" onclick="checkId()" value="아이디 체크">
<br>
<div id="result"></div>
<hr/>
지식인검색어 <input type="text" value="" >
<input type="button" class="btn btn-primary" onclick="find()" value="지식인검색">
</body>
</html>
결과
문제 2 : 비밀번호 값이 동일한지 확인
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<script>
function checkuserId(){
const userid= document.getElementById("userID").value;
if(userid.length<5){
alert("글자수가 5 미만 입니다. 다시 입력해 주세요.");
}else{
console.log("아이디 입력 완료");
}
}
function checkpassword(){
const userpw= document.getElementById("password").value;
const checkpw = document.getElementById("confirmpassword").value;
const passwordmatchmsg = document.getElementById("passwordmatchmsg");
if(userpw === checkpw){ //2개는 주소 비교, 3개는 value 비교
passwordmatchmsg.innerHTML="일치<img src = '/imgs/Imageno.png' width='100' height='100'";
passwordmatchmsg.style.color='red';
}else{
passwordmatchmsg.innerHTML="불일치<img src = '/imgs/Imagyes.png' width='100' height='100'"
}
}
</script>
<body>
<label for="userId">아이디입력</label>
<input type="text" id="userID"/>
<button onclick="checkuserId()">확인</button>
<hr />
<label for="userId">비밀번호 입력</label>
<input type="password" id="password"><br>
<label for="confirm">비밀번호 재입력</label>
<input type="confirmpassword" id="confirmpassword"><br>
<button onclick="checkpassword()">비밀번호 확인</button>
<p id="passwordmatchmsg"></p>
</body>
</html>
결과
문제 3 : 버튼 클릭시 이미지 변경
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function change(img){
const imgDisplays = document.getElementById("imgDisplay");
switch (img){
case 'img1':
imgDisplays.src="/imgs/image1.png";
break;
case 'img2':
imgDisplays.src="/imgs/image2.png";
break;
case 'img3':
imgDisplays.src="/imgs/image3.png";
break;
}
}
</script>
</head>
<body>
<button onclick="change('img1')" style="background-color: limegreen; width: 400px;">제주도로</button>
<button onclick="change('img2')" style="background-color: orange; width: 400px">일본으로</button>
<button onclick="change('img3')" style="background-color: purple; width: 400px">하와이로</button>
<hr color="red" width="600">
<h3>힘들다 우리도 떠나자!</h3>
<hr color="red" width="600">
<img src="/imgs/Imagyes.png" id = "imgDisplay" width="400" height="250"/>
</body>
</html>
결과
문제 4 : 댓글 입력 구현하기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
function addComment(){
let comment = document.getElementById("commmentInPut");
let commentValue= comment.value.trim();
if(commentValue !== ""){
const commentsComtainer = document.getElementById("commentsComtainer");
const div = document.createElement("div"); // div tag 생성
div.classList.add("commentstyle") // <div class="commentstyle">
div.innerHTML="<img src='/imgs/reply.png'> " + commentValue +"<hr style='style=border-top:2px solid red;'>" ;
commentsComtainer.appendChild(div);
comment.value=" ";
document.querySelector
}
else{
alert("댓글을 입력해 주세요");
}
}
</script>
<style>
.commentstyle{
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="container">
<h1 class="text-center mt-5"> 그림을 본 느낌은?</h1>
<img src="/imgs/image2.png">
<div class="mt-5">
<div class="input-group mb-3">
<input type="text" id="commmentInPut" class="form-control" placeholder="댓글을 입력하세요">
<button class="btn btn-primary" onclick="addComment()">댓글달기</button>
</div>
</div>
</div>
<hr class="mt-5">
<div id="commentsComtainer"></div>
</body>
</html>
결과
'KB IT's Your Life' 카테고리의 다른 글
[JavaScript] JavaScript Engine V8 (0) | 2024.05.20 |
---|---|
[Git] Git 상태 추적 (0) | 2024.05.20 |
[Vue.js] 이론 (0) | 2024.05.14 |
[HTML] 이론 및 HTML.Table (0) | 2024.05.07 |
KB IT's Your Life 5기 합격 (17) | 2024.05.06 |