• Home
  • About
    • Young's Github Pages photo

      一日不作一日不食

    • About
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

JavaScript 정리 07

13 Feb 2019

Reading time ~4 minutes

JavaScript 정리 07 - 함수사용


함수

  • 데이터형 반환
typeof()
  • 경고창
alert()
  • 출력
document.write()
document.writeln()
console.log()
  • 정수
parseInt()

Math클래스

  • 수학관련 클래스로 여러 함수가 존재
Math.abs()    // 절대값
Math.round()  // 반올림, 무조건 소수점이하 첫번째 자리에서 반올림
Math.ceil()   // 올림
Math.floor()  // 내림
Math.random() // 난수발생

문자열 함수

  • 글자수(길이)는 속성으로 제공
    • 함수가 아니다! “()”붙이면 에러발생
변수명.length
  • 대문자 변환
변수명.toUpperCase()
  • 소문자 변환
변수명.toLowerCase()
  • 문자 하나 얻기
변수명.charAt(인덱스)
  • 인덱스 얻기
    • 자바처럼 startsWith는 없지만 lastIndexOf는 사용가능
변수명.indexOf('문자열')
변수명.lastIndexOf('문자열')
  • 자식문자열 얻기
변수명.substring(시작인덱스, 끝인덱스+1);
  • 앞 뒤 공백제거
변수명.trim()
  • 특정문자로 구분하여 배열로 얻기
변수명.split('구분할문자열')
  • 치환
    • 가장 먼저 찾아지는 문자열만 바꾼다.
      • Java에선 모든 문자열을 바꾼다.
변수명.replace('찾을문자열', '변경할문자열');

재귀호출 함수

  • thread와 비슷, 지정된 시간마다 함수를 호출
setTimeout(호출할함수, ms)

날짜

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

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

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

함수 사용 예제

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

02

HTML5 지원 속성

  • autofocus속성을 주면 커서가 이동하고 시작됨
<input type="text" autofocus="autofocus" />
  • tabindex 속성
    • 탭을 눌렀을 때 다음에 이동할 태그순서를 명시가능
tabindex="1" // 1,2,3...

JS에서 커서를 요청할 때

  • 커서 이동시키기
document.폼이름.control명.focus();

이벤트

  • window.event객체를 사용하여 처리
  • onOOO 제공한다.(onclick, onchange, … )
  • window.event.keyCode 또는 window.event.which로 키보드이벤트 처리할 때 눌린 키의 키값을 얻을 수 있다.
    • 함수는 onkeydown, onkeyup, onkeypress에 의해 호출
    • 이벤트리스너 keydown, keyup, keypress에 의해 호출
function 함수명() {
    // 키코드값얻기(which와 keyCode 결과는 동일)
    window.event.keyCode
                .which
}

숙제

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

03

<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>
<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



JavaScript