---
title: "JavaScript 정리 07"
date: "2019-02-13"
tags: ["JavaScript"]
status: archived
verified: false
---

---

## 함수

* **데이터형 반환**

```javascript
typeof()
```

* **경고창**
  
```javascript
alert()
```

* **출력**

```javascript
document.write()
document.writeln()
console.log()
```

* **정수**

```javascript
parseInt()
```

## Math클래스 

* **수학관련 클래스로 여러 함수가 존재**

```javascript
Math.abs()    // 절대값
Math.round()  // 반올림, 무조건 소수점이하 첫번째 자리에서 반올림
Math.ceil()   // 올림
Math.floor()  // 내림
Math.random() // 난수발생
```

## 문자열 함수

* **글자수(길이)는 속성으로 제공**
     * 함수가 아니다! "()"붙이면 에러발생

```javascript
변수명.length
```

* **대문자 변환**

```javascript
변수명.toUpperCase()
```

* **소문자 변환**

```javascript
변수명.toLowerCase()
```

* **문자 하나 얻기**

```javascript
변수명.charAt(인덱스)
```

* **인덱스 얻기**
     * 자바처럼 startsWith는 없지만 lastIndexOf는 사용가능

```javascript
변수명.indexOf('문자열')
변수명.lastIndexOf('문자열')
```

* **자식문자열 얻기**

```javascript
변수명.substring(시작인덱스, 끝인덱스+1);
```

* **앞 뒤 공백제거**

```javascript
변수명.trim()
```

* **특정문자로 구분하여 배열로 얻기**

```javascript
변수명.split('구분할문자열')
```

* **치환**
     * **가장 먼저 찾아지는 문자열만 바꾼다.**
          * Java에선 모든 문자열을 바꾼다.

```javascript
변수명.replace('찾을문자열', '변경할문자열');
```

## 재귀호출 함수

* thread와 비슷, 지정된 시간마다 함수를 호출

```javascript
setTimeout(호출할함수, ms)
```

## 날짜

* **Date클래스 사용**
* **날짜는 서버의 날짜가 아니라 접속자의 날짜정보를 사용한다.**
     * **접속자별로 시간이 다르게 나올 수 있다!**
          * **멱등성 위배**
               * (위키) 멱등법칙, 멱등성(idempotent) : 수학이나 전산학에서 연산의 한 성질, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미.

```javascript
// 1. 생성
var 객체명 = new Date();

// 2. 함수호출
객체명.getYear()      // 1900을 더해줘야 현재연도가 나옴(잘안쓰임)
객체명.getFullYear()  // 현재연도
객체명.getMonth()+1   // 월, 자바처럼 0월부터 시작(+1 해야함)
객체명.getDay()       // 일

객체명.getHours()     // 시간
객체명.getMinutes()   // 분
객체명.getSeconds()   // 초
```


## 함수 사용 예제

```html
<style type="text/css">
     #btnDiv { height:40px; }
     #output { 
          width:400px; 
          height:200px; 
          border:1px solid #333;  
          overflow:auto;/*스크롤바*/ 
     }
</style>
```

```html
<body>
<div id="btnDiv">
     <input type="button" value="수학함수" onclick="useMath()"/>
     <input type="button" value="문자열함수" onclick="useString()"/>
     <input type="button" value="날짜함수" onclick="useDate()"/>
     <input type="button" value="재귀호출함수" onclick="useRecursive()"/>
</div>
<div id="output"></div>
</body>
```

```html
<script type="text/javascript">
     // 함수 사용
     function useMath() {
          var divNode = document.getElementById("output");
          var output = "";
          
          var i = -2;
          output += i+"의 절대값 : "+Math.abs(i)+"<br/>";
          
          i = 0.45;
          output += i+"의 반올림: "+Math.round(i)+"<br/>";
          
          i = 0.35;
          output += i+"의 올림: "+Math.ceil(i)+"<br/>";
          
          i = 13.8;
          output += i+"의 내림: "+Math.floor(i)+"<br/>";
          
          divNode.innerHTML = output;
     }
     
     function useString() {
          var divNode = document.getElementById("output");
          var output = "";
          
          var msg = "오늘은 수요일입니다. 수AbCdeF";
          output += msg+"의 글자수 : "+msg.length+"<br/>";
          output += msg+"의 모두 대문자 : "+msg.toUpperCase()+"<br/>";
          output += msg+"의 모두 소문자 : "+msg.toLowerCase()+"<br/>";
          
          output += msg+"에서 '수'글자의 인덱스 :  "+msg.indexOf("수")+"<br/>";
          // indexOf()는 L->R, lastIndexOf()는 R->L
          output += msg+"에서 '수'글자의 인덱스 :  "+msg.lastIndexOf("수")+"<br/>";
          output += msg+"에서 '화'글자의 인덱스 :  "+msg.indexOf("화")+"<br/>"; // 없으면 -1 출력
          
          // 특정 인덱스에 해당하는 문자하나 얻기
          output += msg+"에서 5번째 인덱스의 문자열 : "  +msg.charAt(4)+"<br/>";
          // 인덱스 사이에 해당하는 자식문자열 얻기 :  substring(시작인덱스,끝인덱스+1);
          output += msg+"에서 4~6번째 인덱스의 자식문자열 : "  +msg.substring(4,6+1)+"<br/>";
          
          // 특정문자로 구분하여 배열로 얻기
          msg = "노진경,김희철.김정윤,박영민,최지우";
          var arrData = msg.split(",");
          
          var sa = 1;
          for(var i=0; i<arrData.length; i++) {
               output+= "<marquee  scrollamount="+sa+">"+arrData[i]+"</marquee><br/>"
               sa+=3;
          }
          
          // 앞 뒤 공백제거
          msg = "  A Bc   ";
          output += "["+msg+"]에서 앞 뒤 공백 제거 : ["  +msg.trim()+"]<br/>";
          // 특정 문자열 치환 : L->R 진행하면서 가장 먼저 나오는  문자열 하나만 치환
          msg = "김정윤,박영민,노진경,김희철,오영근";
          output += "["+msg+"]에서 '영' 제거 : ["  +msg.replace("영","호")+"]<br/>";
          
          divNode.innerHTML = output;
     }
     
     function useDate() {
          var divNode = document.getElementById("output");
          var output = "";
          
          // 날짜정보는 접속자 컴퓨터의 시간정보.(접속자 마다 다른  날짜 정보가 얻어질 수 있다.)
          var date = new Date();
          
          output+=date+"<br/>";
          // getYear()는 1900더해야 현재 연도가 나옴
          output+=date.getYear()+"<br/>";
          // 년 월 일
          output+=date.getFullYear()+" "+(date.getMonth()+1)+"  "+date.getDay()+"<br/>";
          
          output += "시 : "+date.getHours()+"<br/>";
          output += "분 : "+date.getMinutes()+"<br/>";
          output += "초 : "+date.getSeconds()+"<br/>";
          divNode.innerHTML = output;

          if(date.getSeconds() == 50){
               useRecursive();
          }
          
          // 재귀호출함수, 지정한 시간에 함수를 호출해주는 함수  setTimeout(함수명, msg)
          setTimeout(useDate, 1000);
     }
     
     function useRecursive() {
          var divNode = document.getElementById("output");
          var output = "<img src='../common/image/img2.jpg'>";
          divNode.innerHTML = output;
     }
</script>
```

![01](/md/legacy-assets/Web/JS/07/01.webp)

![02](/md/legacy-assets/Web/JS/07/02.webp)

## HTML5 지원 속성

* **autofocus**속성을 주면 커서가 이동하고 시작됨

```html
<input type="text" autofocus="autofocus" />
```

* **tabindex** 속성
  * 탭을 눌렀을 때 다음에 이동할 태그순서를 명시가능

```
tabindex="1" // 1,2,3...
```


## JS에서 커서를 요청할 때 

* **커서 이동시키기**

```javascript
document.폼이름.control명.focus();
```

## 이벤트

* **window.event객체**를 사용하여 처리
* onOOO 제공한다.(onclick, onchange, ... )
* **window.event.keyCode** 또는 **window.event.which**로 키보드이벤트 처리할 때 눌린 키의 키값을 얻을 수 있다.
     * **함수는 onkeydown, onkeyup, onkeypress**에 의해 호출
     * **이벤트리스너 keydown, keyup, keypress**에 의해 호출

```javascript
function 함수명() {
    // 키코드값얻기(which와 keyCode 결과는 동일)
    window.event.keyCode
                .which
}
```

## 숙제

* this와 정규식을 사용한 풀이

![03](/md/legacy-assets/Web/JS/07/03.webp)

```html
<body>
<div>
      <form name="frm">
      <input type="text" name="input" value="abcy12Ab3456Z"/>
      <input type="button" id="lowerCase" value="소문자" />
      <input type="button" id="upperCase" value="대문자" />
      <input type="button" id="number" value="숫자" />
      </form>
</div>
<div id="output"></div>
</body>
```

```html
<script type="text/javascript">
      window.onload = function() {
            document.getElementById("lowerCase").addEventListener("click",  viewCase);
            document.getElementById("upperCase").addEventListener("click",  viewCase);
            document.getElementById("number").addEventListener("click",  viewCase);
      }
      
      function viewCase() {
            var obj = document.frm;
            var divNode = document.getElementById("output");
            var data = obj.input.value;
            var output = "";
            
            console.log("???");
            if (this.value == '소문자') {
                  output += "소문자 : "+data.replace(/[A-Z0-9]/g,"");
            } else if (this.value == '대문자') {
                  output += "대문자 : "+data.replace(/[a-z0-9]/g,"");
            } else if (this.value == '숫자') {
                  output += "숫자 : "+data.replace(/[A-Za-z]/g,"");
            }
            
            divNode.innerHTML = output;
      }
</script>
```

![04](/md/legacy-assets/Web/JS/07/04.webp)
