728x90

 

자주 사용하는 정규 표현식

 

$&, $`, $’

$& : 제일 처음 일치하는 문자열

$` : 일치한 문자열의 앞 문자열

$' : 일치한 문자열의 뒤 문자열

<button onclick="test2();"> 정규표현식 - $&, $`, $' </button>
<script>
    function test2(){
        var regExp = /as/;      // 정규식 객체 생성  // 비교 기준점
        var str = 'javascript jquery ajax sass';    // 정규식 적용 자원(검사할 원본 문자열)

        // String의 메소드 : str.replace() 사용    
        // $& : 제일 처음 일치하는 문자열 // 소괄호 감싼문자로 대체해줌 (as) 소괄호쳐서 출력  // 해당문자열의 제일 앞에 일치하는 문자 소괄호 -> 맨앞의 (as)만 대체됨
        console.log('$& : ' + str.replace(regExp, '($&)')); // $& : jav(as)cript jquery ajax sass
        // $` : 일치한 문자열의 앞 문자열 // 매칭된 문자열에 앞 문자열을 의미 // 내 앞에 있는 문자열로 대체
        console.log('$& : ' + str.replace(regExp, '($`)')); // $& : jav(jav)cript jquery ajax sass
        // $' : 일치한 문자열의 뒤 문자열 // 지정한 문자열 이후 문자열로 대체 // // 지정한 문자열의 뒤 문자열로 대체되어 나옴 -> as 뒤의 전체 문자열로 대체
        console.log('$& : ' + str.replace(regExp, "($')")); // $& : jav(cript jquery ajax sass)cript jquery ajax sass
                                         // $' 싱글쿼테이션 사용이라 밖을 더블""로 감싸야함
    }
</script>

 

 

()와 |

데이터 중에 /( )/에 들어간 데이터(기준점)와 일치하는 데이터 반환 : boolean

  • 일치는 true 미일치는 false로 반환 : true / fasle로 반환

/( )/ 내부의 데이터 구분은 |으로 함

<button onclick ="test3();"> 정규표현식 : ()와 | : boolean</button>
<script>
  function test3() {
      var src = ['월요일','화요일','수요일','목요일','금요일','토요일','일요일']; // 정규식 적용할 데이터
//          var regExp = /(금요일|토요일|일요일)/;    // 정규식 객체 생성 // 비교 기준점
      var regExp = /**(금|토|일)**요일/;    // 공통부분 축약 방식 : /( | | | )축약할 공통부분/;

      // 데이터 중에 /()/에 들어간 데이터(기준점)와 일치하는 데이터는 true 
      // 아닌 데이터는 false로 반환

      for(var i in src) {
          console.log(src[i] + " : " + **regExp.test**(src[i])); // 금토일 true // 일치 true, 불일치 false 출력됨

      }

 

 

 

플래그 문자 : g i m

g : 전역 비교 수행

i : 대소문자를 가리지 않고 비교 수행

m : 여러줄을 검사하는 플래그 문자

(줄바꿈된 데이터들도 검사한다는 의미)

<button onclick="test4();">  정규표현식 - 플래그 문자 - g  i  m </button>
<script>
    function test4() {
        var str = "JAvaScript JQuery Ajax\\nJAvaScript JQuery Ajax";
        
        // String의 메소드 : str.replace() 사용    

        // /a/ : 일치하는 문자 중 첫번째만 
        var regExp0 = /a/;
        console.log(regExp0 + " : " + str.replace(regExp0, '($&)'));    // /a/ : JAv(a)Script JQuery Ajax
                                                                        // JAvaScript JQuery Ajax
        // g : 일치하는 문자열 모두 비교(전역 비교 수행) ()
        // 모든 비교를 다 비교하게끔 하는 것(전역 비교 수행)
        

        // /a/g : 일치하는 문자열 모두  ( g => 전역비교 수행 )
        var regExp1 = /a/g;
        console.log(regExp1 + " : " + str.replace(regExp1, '($&)')); // /a/g : JAv(a)Script JQuery Aj(a)x
                                                                    // JAv(a)Script JQuery Aj(a)x

        // /a/i : 대소문자 구분없이 일치하는 문자 중 첫번째 문자열
        var regExp2 = /a/i;
        console.log(regExp2 + " : " + str.replace(regExp2, '($&)')); // /a/i : J(A)vaScript JQuery Ajax
                                                                     // JAvaScript JQuery Ajax
                                                                     
        // /a/gi : 대소문자 구분없이 모든 문자열 -> ig, gi 둘 다 가능
        var regExp3 = /a/gi;
        console.log(regExp3 + " : " + str.replace(regExp3, '($&)')); // /a/gi : J(A)v(a)Script JQuery (A)j(a)x
                                                                     // J(A)v(a)Script JQuery (A)j(a)x

    }                                                                                       
</script>

 

 

앵커문자 : ^, $

문자열의 앞과 뒤를 구분해주는 정규표현식 기호

아래 둘은 위치 고정 앵커문자로 정규표현식 패턴을 특정 위치에 고정시킨다

^ : 앞

$ : 뒤

// 대소문자 구분없이 모든 j
var regExp1 = /j/gi;
console.log(regExp1 + " : " + str.replace(regExp1, '($&)'));  // /j/gi : (J)avaScript
                                                              // (J)Query
                                                              // A(j)ax
//지정한 첫번째 문자
// ^ : 맨 앞만 적용시키는 기호
var regExp1_2 = /^j/gi; // ^ : 맨 앞만 적용시키는 기호
console.log(regExp1_2 + " : " + str.replace(regExp1_2, '($&)')); // /^j/gi : (J)avaScript
// g 넣어도 ^<-때문에 전역비교는 못하고 맨 앞에있는것만 비교하는거 // JQuery
                                                                 // Ajax

// 두번쨰 j 체크안됨. ^ 문자열의 앞을 의미. Ajax는 체킹이 안됐음
// m : 여러줄 전체를 검사하는 플래그 문자            =======  g와 m의 차이는?
var regExp1_3 = /^j/gim; // ^ : 맨 앞만 적용시키는 기호
console.log(regExp1_3 + " : " + str.replace(regExp1_3, '($&)')); // /^j/gim : (J)avaScript
                                                                 // (J)Query
                                                                 // Ajax

var str2 = "JavaScript\\nJQuery\\nShellScript\\nAjax";

var regExp3 = /ipt/gi;
console.log(regExp3 + " : " + str2.replace(regExp3, '($&)'));   // /ipt/gi : JavaScr(ipt)
                                                                // JQuery
                                                                // ShellScr(ipt)
                                                                // Ajax
// /ipt$/gi
var regExp3 = /ipt$/gi; // ^가 앞이면 $는 뒤를 보는 것 // 그렇기 때문에 어디에서 채팅(?) 안되는 것
console.log(regExp3 + " : " + str2.replace(regExp3, '($&)'));   // /ipt$/gi : JavaScript
 // 전체적으로 한번에 다 보는건데, $ = 문자열의 뒤를 이야기함.    // JQuery
                                                                // ShellScr
                                                                // Ajax
// /ipt$/gim : 맨 끝에 ipt가 나오는 걸 체크해라
var regExp3 = /ipt$/gim; // ^가 앞이면 $는 뒤를 보는 것 // 그렇기 때문에 어디에서 채팅(?) 안되는 것
console.log(regExp3 + " : " + str2.replace(regExp3, '($&)'));   // /ipt$/gi : JavaScr(ipt)
                                                                // JQuery
                                                                // ShellScr(ipt)
                                                                // Ajax

 

 

수량 문자

a*: a가 0개 이상
a+: a가 1개 이상
a?: a가 0개이거나 또는 1개일 때

var src = "aabc abc bc";
            
var regExp1 = /a*b/g; // 문자열의 모든 영역에서 a는 0개 이상이고 그 뒤에는 b가 들어가 있는 문자열 의미
console.log(regExp1 + " : " + src.replace(regExp1, '($&)'));    // (aab) , (ab), (b) <- a가 0개 이상
    
var regExp2 = /a+b/g; // 문자열의 모든 영역에서 a는 1개 이상이고, 그 뒤에는 b가 들어가 있는 문자열을 의미
console.log(regExp2 + " : " + src.replace(regExp2, '($&)'));    // (aab), (ab) <- a가 1개 이상

var regExp3 = /a?b/g; // 문자열의 모든 영역에서 a는 0개이거나 1개이고 그 뒤에는 b가 들어가 있는 문자열을 의미
console.log(regExp3 + " : " + src.replace(regExp3, '($&)'));    //(ab)c (ab)c (b)

 

 

{ }를 이용한 수량 표현

a{5}: a가 5개다

a{2,5}: a가 2~5개 사이

a{2,}: a가 2개 이상

a{,2}: a가 2개 이하

var src = "AA ABA ABBA ABBBA";

var regExp11 = /AB*A/g; 
console.log(regExp11 + " : " + src.replace(regExp11, '($&)'));
// (AA) (ABA) (ABBA) (ABBBA)
          
var regExp21 = /AB+A/g;
console.log(regExp21 + " : " + src.replace(regExp21, '($&)'));
//AA (ABA) (ABBA) (ABBBA)
            
var regExp31 = /AB?A/g;
console.log(regExp31 + " : " + src.replace(regExp31, '($&)'));
//(AA) (ABA) ABBA ABBBA

// {}를 이용한 수량 표현
var regExp12 = /AB{0,}A/g;
console.log(regExp12 + " : " + src.replace(regExp12, '($&)'));
// (AA) (ABA) (ABBA) (ABBBA)

var regExp22 = /AB{1,}A/g;
console.log(regExp22 + " : " + src.replace(regExp22, '($&)'));
//AA (ABA) (ABBA) (ABBBA)

var regExp32 = /AB{0,1}A/g;
console.log(regExp32 + " : " + src.replace(regExp32, '($&)'));
//(AA) (ABA) ABBA ABBBA

 

 

메타문자와 [ ] 

[ ab ] : a 또는 b

[ ^ ] : 해당 문자만 제외한 나머지

[a-z] : '소문자'만

[A-Z] : '대문자'

[0-9] : '숫자'만

범위 설정 가능

var str1 = "JavaScript JQuery Ajax";

// [ aj ] : a 또는 j를 찾아라
var regExp1 = /[aj]/ig; // a나 j를 찾아라 // 찾고 싶을 때 대괄호 많이 사용 // 많이 사용하는 이유 : 범위 설명 가능
console.log(regExp1 + " : " + str1.replace(regExp1, '($&)'));   // (J)(a)v(a)Script (J)Query (A)(j)(a)x

// [ ^ ] : 해당 문자만 제외한 나머지
var regExp2 = /[^aj]/ig; // 대괄호 안에서의 ^ : 해당 문자만 제외한다는 의미 // a,j를 제외한 나머지
console.log(regExp2 + " : " + str1.replace(regExp2, '($&)'));   // Ja(v)a(S)(c)(r)(i)(p)(t)( )J(Q)(u)(e)(r)(y)( )Aja(x)

var str2 = "123JavaScript";
// [a-z] : '소문자'만 체크
var regExp3 = /[a-z]/g;
console.log(regExp3 + " : " + str2.replace(regExp3, '($&)'));   // 123J(a)(v)(a)S(c)(r)(i)(p)(t)

// [A-Z] : '대문자'만 체크
var regExp4 = /[A-Z]/g;
console.log(regExp4 + " : " + str2.replace(regExp4, '($&)'));   // 123(J)ava(S)cript

// [0-9] : '숫자'만 체크
var regExp5 = /[0-9]/g;
console.log(regExp5 + " : " + str2.replace(regExp5, '($&)'));   // (1)(2)(3)JavaScript

// 복수의 조건 함께 적용 (소문자, 숫자 둘 다) -> 순서바뀌어도 ok ex)0-9a-z / a-z0-9 
var regExp6 = /[0-9a-z]/g;
console.log(regExp6 + " : " + str2.replace(regExp6, '($&)'));   // (1)(2)(3)J(a)(v)(a)S(c)(r)(i)(p)(t)

 

 

 

추가 메타 문자 : \d, \w, \s, \D, \W, \S

\d : 숫자
\w : 영어, 숫자, _ (언더바)
\s : 공백문자(탭, 띄어쓰기, 줄바꿈)
\D : 숫자를 제외한 나머지
\W : 영어, 숫자, _(언더바)를 제외한 나머지
\S : 공백문자(탭, 띄어쓰기, 줄바꿈)를 제외한 나머지

var src = "A1 B2 c3 d_4 e:5` ffGG77--__--        가\\n나\\n다";

// /\\d/ : 숫자만
var regExp1 = /\\d/g;
console.log(regExp1 + " : " + src.replace(regExp1, '($&)'));  //  A(1) B(2) c(3) d_(4) e:(5)` ffGG(7)(7)--__-- 가나다

// /\\w/ : 영어 숫자 _(언더바)만 / 공백,  특수문자, 한글 , 줄바꿈 제외 (나머지 제외(?))
var regExp2 = /\\w/g;
console.log(regExp2 + " : " + src.replace(regExp2, '($&)')); // (A)(1) (B)(2) (c)(3) (d)(_)(4) (e):(5)` (f)(f)(G)(G)(7)(7)--(_)(_)--        가나다

// /\\s/ : 공백문자(탭,줄바꿈, 띄어쓰기)만
var regExp3 = /\\s/g;
console.log(regExp3 + " : " + src.replace(regExp3, '($&)')); //  A1( )B2( )c3( )d_4( )e:5`( )ffGG77--__--( )( )( )( )( )( )( )( )가(

// /\\D/ : 숫자를 제외한 나머지  
var regExp4 = /\\D/g;
console.log(regExp4 + " : " + src.replace(regExp4, '($&)'));

// /\\W/ : 영어, 숫자, _(언더바)를 제외한 나머지
var regExp5 = /\\W/g;
console.log(regExp5 + " : " + src.replace(regExp5, '($&)'));
// /\\S/ : 공백문자(탭, 띄어쓰기, 줄바꿈)를 제외한 나머지
var regExp6 = /\\S/g;
console.log(regExp6 + " : " + src.replace(regExp6, '($&)'));

 

 

Escaping : \

\ : \를 붙여 해당 문자를 문자자체로 인식하게 하는 기호

var src = "$12$ \\\\-\\\\ $35$";        // \\\\또한 \\를 인식시키기 위해 \\\\를 써서 \\ 하나를 인식시킴
// 목적 : $ 를 찾고 싶다.

// $ : 맨 뒤를 나타내는 앵커문자 -> $달러 자체 문자를 찾으려면?
var regExp1 = /$/   // $문자 자체를 찾고 싶은데 안나온다. 이유:앵커문자로 인식되기 때문에 이스케이핑으로 $를 인식하게해야함
console.log(regExp1 + " : " + src.replace(regExp1, '($&)'));    // $12$ \\-\\ $35$()
var regExp1_2 = /\\$/
console.log(regExp1_2 + " : " + src.replace(regExp1_2, '($&)'));    // ($)12$ \\-\\ $35$
var regExp1_3 = /\\$$/
console.log(regExp1_3 + " : " + src.replace(regExp1_3, '($&)'));    // $12$ \\-\\ $35($)

var regExp3 = /\\\\/
console.log(regExp3 + " : " + src.replace(regExp3, '($&)'));    // $12$ (\\)-\\ $35$

 

 

포인트 :    .

딱 한글자 a와 b사이에 한글자가 들어가면 true 아니면 false

<button onclick="test11();"> 정규표현식 - 포인트. </button>
<script>
  function test11(){
  var regExp1 = /a.b/;
    // a뒤 한글자 그 다음에 b가 나와야함
    // 딱 한글자. a와 b사이에 한글자가 들어가면 true 아니면 false
    // a와 b사이에 한글자가 들어가기만 하면 조건 성립이라 앞에 다른 문자가 와도 상관x
    console.log(regExp1 + " : " + regExp1.test('ab'));      // false
    console.log(regExp1 + " : " + regExp1.test('a와b' ));   // true
    console.log(regExp1 + " : " + regExp1.test('a또는b'));  // false

    // xy다음 무조건 한글자가 나와야함
    var regExp2 = /xy./;
    console.log(regExp2 + " : " + regExp2.test('xyz'));     // true
    console.log(regExp2 + " : " + regExp2.test('wxy '));    // true // 공백도 한글지 취급되서 true
    console.log(regExp2 + " : " + regExp2.test('xy와xx'));  // true // 내 뒤에 알빠없고 '와'때문에 트루
    console.log(regExp2 + " : " + regExp2.test('xy'));      // false   
    // 걍 바로 뒤에 아무 글자나 오면 true 
        

    // /in.$/ : in뒤에 한 글자가 맨 뒤에 나와야한다
    // $ 역할 : 맨 뒤 문자를 가리키는 앵커문자
    var regExp3 = /in.$/;
    console.log(regExp3 + " : " + regExp3.test('going')); // true
    console.log(regExp3 + " : " + regExp3.test('inner')); // false // in 다음 한글자가 맨뒤 글자가 아니기에 false

 

728x90
반응형
728x90

 

 

정규표현식(RegularExpression)

정의

내가 사용하고자하는 원하는 패턴에 맞는 값을 확인하는 것

유효한 식인지 적당한 값인지 확인하는 패턴

특정 패턴의 문자열을 찾기위한 표현방식

 

 

자주 쓰는 사용처

회원가입

id,pw등 값을 쓴다고 했을 때

아이디를 1을 넣었을 때 5-20자 영문특문만 가능

이미 사용 중이거나 탈퇴한 아이디

쓸 수 없는 기호 걸러줌

  • 쓸 수 있는 아이디와 없는 아이디 걸러주는 역할
  • 표현식을 만들어서, 유효한 식인지 적당한 값인지 만들어보는 것

 


 

정규표현식의 객체 생성

방법1 : new 연산자 사용

방법2 : 스크립트 작성

 

방법1 : new 연산자 사용

var regExp = new RegExp('script');  // 정규식 객체 생성 : ' '
var regExp = new RegExp(/script/);  // 정규식 객체 생성 : / /

 

방법2 : 스크립트 작성

정규식 생성하겠다 의미 내포한 변수 생성

new와 소괄호 없이 정규식 객체 생성

var regExp =  /script/;

 

단순 변수 생성한 것

위에서 정규식의 객체를 생성한 / /랑 다르다

var regExp =  'script';  // 그냥 변수 생성 // 위의 / /랑 다른 슬래시

 

 

 

정규표현식에서 자주사용하는 메소드

test()

해당글자가 존재하면 true 존재하지 않으면 false

console.log(regExp.test(str));  // true

 

exec()

존재여부확인, 해당글자가 없으면 null 있으면 정보배열(index,input)반환

console.log(regExp.exec(str));  // ['script', index: 4, input: 'javascript jquery ajax', groups: undefined]
                                //  <- 해당글자가 있어서 정보배열반환

index랑 input 반환하는 기준 비교하고자하는 값이 스크립트 몇번째에서 나타나냐? 01234에서부터 나타나는 script

index = index번째

input = 어디에서

 

 


 

 

String의 메소드

정규표현식 외에도 str에서 많이 쓰는 메소드로도 비교함

정규표현식 메소드가 있으니까 정규표현식 메소드만 쓰기 보다 다양하게 활용가능하다

 

match()

== exec() 결과가 exec와 같음. str의 메소드도 충분히 활용 가능

console.log(str.match(regExp));

 

str.replace()

해당글자를 지정한문자로 바꿔줌

console.log(str.replace(regExp,'스크립트'));

 

 

728x90
반응형
728x90

 

이벤트(Event)

 

A.이벤트 설정 방법

 

1.고전 이벤트 모델

요소에 접근해서 속성 집어넣어서 이벤트 추가하는 것

 

이벤트 추가(기능 추가)

var test1 = document.getElementById('test1'); // 요소 접근
// var test1에 속성 넣고

// 이벤트 추가
test1.onclick = function() {
        console.log('test1이 실행되었습니다.');
}

 

이벤트 삭제(기능 삭제)

test2.onclick = function() {
        console.log('test2가 실행되면서 test1이벤트를 삭제하였습니다.');
        test1.onclick = null;    // null 집어넣어서 삭제
}

 

다른 이벤트 실행방법

지금까지 직접 펑션 집어넣었었는데, 펑션을 하나 미리 만들어 놓고 거기에다 연결도 가능

var test2_1 = document.getElementById('test2_1');
function test21() {
    alert('이름으로 이벤트 연결');
}
test2_1.onclick = test21;

 

다수의 이벤트 동시에 연결가능

var test2_1 = document.getElementById('test2_1');
function test21() {          // function 미리 선언
    alert('이름으로 이벤트 연결');
}
test2_1.onclick = test21;   // 미리 선언한 function 호출
 
// 다수의 이벤트 동시 연결 가능
test2_1.onmouseover = function() {      // onmouseover : 마우스포인터가 해당 위치로 가면 발생
    console.log('여러 이벤트 동시 연결 가능');
    // onmouseover : 마우스가 올라간것에 대한 이벤트 
}

test2_1.onclick = test21;로 위에서 선언된 test21 펑션을 호출하면서 바로 아랫줄에서 마우스포인터가 해당 버튼에 올라가면 이벤트 발생하도록 또 펑션을 연결하므로써 동시다발적으로 이벤트가 발생 가능하게 함

 

2.인라인 모델

태그안에 집어넣는게 인라인모델

<h3>인라인 모델</h3>
    <button onclick="**test4()**;">Event - 인라인 모델</button>
    <button onclick="alert('test4 가 실행되었습니다')">Event - 인라인 모델</button>
    <script>
        function test4(){
            alert('test4가 실행되었습니다');
        }
    </script>

 

3.표준 이벤트 모델

 

addEventListener : 이벤트 추가

addEventListener(연결이벤트, 실행할 함수)
<button id="test5">표준 이벤트 모델 : test5 실행확인</button>
<script>
    var test5 = document.getElementById('test5');

    function fn_test5_1() {
        console.log('test5가 클릭됐습니다.');
    }
    function fn_test5_2() {
        console.log('test5에 들어왔습니다.');
    }

    // 이벤트 추가 : addEventListener
    test5.addEventListener('click', fn_test5_1);     // click하면 fn_test5_1 함수 실행하라는 코드
    test5.addEventListener('mouseover', fn_test5_2); // 마우스포인터가 올라가면 fn_test5_2 함수를 실행하라는 코드

</script>

 

removeEventListener : 이벤트 삭제

removeEventListener(삭제할 이벤트, 삭제할 함수)
<button id="test5">표준 이벤트 모델 : test5 실행확인</button>
<button id="test6">표준 이벤트 모델 : test6 실행확인</button>
<script>
    var test5 = document.getElementById('test5');
    var test6 = document.getElementById('test6');

    // 이벤트 삭제 : removeEventListener
    test6.addEventListener('click', function() {     // 클릭하면 function() 함수를 실행하라는 코드
        console.log('test6에 들어오면서 test5의 클릭이벤트를 제거 했습니다.');
        **test5.removeEventListener('click',fn_test5_1);**
        // 이벤트 삭제 효과 : 이벤트 제거 후, test5 진입은 되나 클릭은 안되게 된다.

    });

</script>

 

 

 


 

이벤트 기본 동작이란?

웹브라우저의 구성요소들은 각각 기본적인 동작 방법을 가지고 있다.

  • 텍스트 필드에 포커스를 준 상태에서 키보드를 입력하면 텍스트가 입력된다.
  • 폼에서 submit 버튼을 누르면 데이터가 전송된다.
  • a 태그를 클릭하면 href 속성의 URL로 이동한다.

이러한 기본적인 동작들을 기본 이벤트라고 하는데 사용자가 만든 이벤트를 이용해서 이러한 기본 동작을 취소할 수 있다.

 

이벤트 기본동작 취소하는 방법 3가지

 

1)inline

이벤트의 리턴값이 false이면 기본 동작이 취소된다.

<p>
    <a href="http://opentutorials.org" 
			onclick="if(document.getElementById('prevent').checked) return false;">opentutorials</a>
</p>
<p>
    <form action="http://opentutorials.org" 
					onsubmit="if(document.getElementById('prevent').checked) return false;">
            <input type="submit" />
    </form>
</p>

 

2)property 방식

리턴 값이 false이면 기본동작이 취소된다.

<p>
    <a href="http://opentutorials.org">opentutorials</a>
</p>
<p>
    <form action="http://opentutorials.org">
            <input type="submit" />
    </form>
</p>
<script>
    document.querySelector('a').onclick = function(event){
        if(document.getElementById('prevent').checked)
            return false;
    };
     
    document.querySelector('form').onclick = function(event){
        if(document.getElementById('prevent').checked)
            return false;
    };
 
</script>

 

3)addEventListener 방식

이 방식에서는 이벤트 객체의 preventDefault 메소드를 실행하면 기본 동작이 취소된다

<label>prevent event on</label>
<input id="prevent" type="checkbox" name="eventprevent" value="on" />
<p>
    <a href="http://opentutorials.org">opentutorials</a>
</p>
<p>
    <form action="http://opentutorials.org">
            <input type="submit" />
    </form>
</p>
<script>
    document.querySelector('a').addEventListener('click', function(event){
        if(document.getElementById('prevent').checked)
            event.preventDefault();
    });
     
    document.querySelector('form').addEventListener('submit', function(event){
        if(document.getElementById('prevent').checked)
            event.preventDefault();
    });

</script>

출처 : https://opentutorials.org/course/1375/6769

728x90
반응형
728x90

 

DOM(Document Object Model)

 

A.Node객체

노드 = 객체 = 태그
노드 : 태그를 객체와 시켜서 보는 것

글자가 안에 들어갈 수 있으면 다 텍스트 노드

 

1.텍스트노드가 있는 노드 생성

 

createElement()

요소 노드를 만듦

// createElement(): 요소 노드를 만듦
var title = document.createElement('h3'); // <h3></h3>  // createElement() : h3이라는 요소를 만들겠다

 

createTextNode()

텍스트 노드를 만듦

// createTextNode(): 텍스트 노드를 만듦
var textNode = document.createTextNode('안녕'); // <h3></h3>

 

appendChild()

노드(요소)를 요소의 마지막 자식으로 추가

// appendChild(): 노드(요소)를 요소의 마지막 자식으로 추가
title.appendChild(textNode); // <h3>안녕</h3>    // <h3> 이 안에 안녕을 집어넣음 </h3>
// 어펜드차일드 : 이어붙이는 것이 어펜드. 자식으로 이어붙이는 것. 
// 타이틀 h3안에다가 집어넣겠따 애리어1 어펜드 div 안에다가 붙여넣겠d다
// title만 넣어도 되는 것

document.getElementById('area1').appendChild(title);
// area1을 id로 가진 div를 찾아서 자식으로 title을 넣어줌 
// title안에 이미 textNode가 들어갔기 때문에 title만 집어넣어주면 된다.

// div를 area1 을 찾아서 자식으로 title을 넣어줌 
// title안에 이미 textNode가 들어갔기 때문에 title만 집어넣어주면 된다.

 

2.텍스트노드가 없는 노드 생성

이미지 태그 만들기

document.createElement('img');

+이미지 소스 경로 지정

function test2(){ 
	// createElement(): 요소 노드를 만듦
  var imgTest = document.createElement('img'); // img태그만듬
  //텍스트가 필요없기에 createTextNode() 생성할 필요 x 
  // but, img파일의 소스 경로지정은 해줘야한다

  imgTest.src = "<https://www.telegraph.co.uk/content/dam/Pets/spark/royal-canin/happy-puppy.jpg?imwidth=1240>";
  imgTest.width = '150';
  imgTest.height = '100';
  imgTest.myProperty = 'abc'; // 이런 속성이 없어서 안들어감... 근데 강제로 넣을 수 있다.

  // 아래코드 넣어 차이가 뭐지?
  imgTest.setAttribute('myProperty','ABC');   // 이렇게 강제로 넣어줌

  document.getElementById('area2').appendChild(imgTest);  // div에 위 imgTest 넣음.
}

 

B.innerHTML

innerText와 차이

innerText: 요소 또는 노드의 텍스트 내용을 반환

// 목표 : 버튼 누르면 데이터행 추가되도록 만들 것
var board = document.getElementById('board');

var num = 1;
var title = '제목임다';
var user = 'user01';
var count = 1;
var date = new Date();
//데이터에 대한 행이 추가되게 할거임
// tr이 존재해야겠다. 추가하려면 
// 그안에 데이터 집어넣을 수 있도록해야하니 
// td들도 만들어야겠다. 

board.innerHTML += '<tr><td>' + num + '</td>'
                    + '<td>' + title + '</td>'
                    + '<td>' + user + '</td>'
                    + '<td>' + count + '</td>'  // getFullYear(): 날짜의 전체 연도(4자리)를 반환
                    + '<td>' + date.getFullYear() + "-" + (date.getMonth()+1)
                             + "-" + date.getDate() + "</td></tr>";

// 자바 jdbc에서 sql 연결 시 쿼리문 작성처럼 js도 html을 작동할 수 있게 코드적기
// 데이터행 추가할려면 기본적으로 tr이 존재해야함
// tr에 데이터 집어넣을 수 있게하려면 td도 만들어줘야한다
// innerHTML문 안에는 html에서 하던 테이블만들기 구조 그대로 하되 넣고 싶은 데이터만 변수처리

// innerHTML
// 태그 안에 있는 데이터 가져오거나 추가하기위해 사용

            // 우리는 지금 하는건 추가하는것임
            // 근데 innerHTML은 HTML이라고 이름이 되어있지?
            // 여기에 들어가있는 태그들을 HTML로 인지해서 바꿔줄 수 있어
            // 이런 스트링값들을 태그로 인지시킬 수 있어
            // innerHTML이라서 가능한것임!! 태그로 인지시키고싶다할때 사용!!
            // 얘랑 비슷하게 생긴애가 innerText라는 애가 있는데,
            // 걔는 태그가 아니라 그냥 텍스트로 찍혀버림
            // 텍스트는 말 그대로 문자 자체로 인지해서 태그로 인식못함..
            // 정말 글자만 보고싶을때 사용하는애

// innerHTML은 str값들을 태그로 바꿔서 인지 시킬 수 있다
// innerHTML라서 가능함. 다른 애들도 다 가능x
// innerText 안에 들어가는 글자만 보고 싶다 // 태그를 아무리 넣어도 인지x

// 태그도 좀 필요하면 innerHTML 

}

 

C.스타일 지정

CSS 적용시키는 JS코드

area4.style.backgroundColor = 'black';

area4 변수 객체의 style속성에 접근

백그라운드 컬러 속성에 접근 후 대입연산자(=)를 통해 black 속성값을 넣어준 것

 

<button onclick="test4();">실행확인</button>
<div id="area4" class="area"></div>
<script>
  function test4() {
      var area4 = document.getElementById('area4');
      
      area4.**style**.**backgroundColor** = 'black';  // 배경색 변경
      area4.**style**.**borderRadius** = "100px";     // borderRadius : 테두리 둥글게
      area4.**style**.**transition** = 'all 2s'       // transition : 모양이 2초에 걸쳐 천천히 바뀜
      // 트랜지션 - 2초안에 끝내라고 css적용
  }
</script>

 

D.노드 삭제

변수명.remove()

<button onclick="test5();">실행확인</button>
<div id="area5" class="area"></div>
<script>
    function test5() {
        var area5 = document.getElementById('area5');
        area5.**remove**();
        area5.**remove**();
        // 노드를 삭제하는 방법 , area5가 삭제가 됨.
    }
</script>

 

 

 

 

728x90
반응형
728x90

 

BOM(Browser Object Model)

 

A.navigator객체

웹 페이지를 실행하고 있는 브라우저에 대한 정보를 갖고 있는 객체

브라우저에 대한 정보를 갖고있다는 것이 중요한 이유 :
appName,appCodeName 등을 통해서 어떤 브라우저를 쓸 수 있는지 볼 수 있음

window.navigator : 방문자의 브라우저에 대한 정보가 포함

 

navigator 속성

1.appName : 브라우저의 애플리케이션 이름을 반환

2.appCodeName : 브라우저의 애플리케이션 코드 이름을 반환

         ("Mozilla"는 Chrome, Firefox, IE, Safari 및 Opera의 애플리케이션 코드 이름)

3.product : 브라우저 엔진의 제품 이름을 반환

4appVersion : 브라우저에 대한 버전 정보를 반환

<button onclick="test1();"> BOM - navigator객체 </button>
<script>
  function test1(){
    for (var key in navigator){
      console.log(key + " : " + navigator[key]); // 숫자+ str = str
      // console에서 appName,appCodeName 등 통해 어떤 브라우저를 쓸 수 있는지 확인가능
    }
  }
</script>

 


 

B.screen 객체

웹 브라우저 화면이 아닌 운영체제 화면(모니터)의 정보를 가지는 객체

 

window.screen

사용자의 화면에 대한 정보를 포함

화면의 크기가 사용자마다 다르니까 모니터의 실제 길이를 알아야 해당 모니터들의 크기에 따라 비율을 결정짓거나 동일하게 적용을 시킬 수 있으니 모니터의 크기등을 알아 올 때 사용하는 모니터 정보를 받아오는 객체 screen을 사용함

<button onclick="test2();">BOM - screen객체</button>
    <script>
        function test2(){
            for (var key in screen){
             console.log(key + " : " + screen[key]);
            
            }

// 스크린 객체의 사용용도 & 필요성
// 작은모니터로 가면 너무 커서 안보일 수도 있고 작은 모니터에서는 적당한데 큰모니터로 가면 너무 작아서 안보일 수 있다
// 비율을 유지하고 싶다면, 유저에 대한 모니터 크기가 게산에 반드시 필요. 비율 유지를 위한 크기 계산을 위해 필요.
// 화질 지원을 얼마나 할 수 있는지에 대해서도 알아보기위해 사용해볼 수 있음
        }
    </script>

colorDepth: 사용가능한 컬러수

pixelDepth: 사용가능한 픽셀수

 

스크린 객체의 사용용도 & 필요성

작은모니터로 가면 너무 커서 안보일 수도 있고 작은 모니터에서는 적당한데 큰모니터로 가면 너무 작아서 안보일 수 있다 모니터 크기 상관없이 비율을 유지하고 싶다면, 유저에 대한 모니터 크기가 계산에 반드시 필요. 화질 지원을 얼마나 할 수 있는지에 대해서도 알아보기위해 사용해볼 수 있음

 


 

C.location객체

브라우저 주소 표시줄과 관련된 객체

 

window.location

현재 페이지 주소(URL)를 가져오고 브라우저를 새 페이지로 리디렉션

window.location = location = location.href

window.

.href

둘 다 생략 가능

<button onclick="test3();">BOM - location객체</button>
<script>
    function test3(){
        for (var key in location){
            console.log(key + " : " + location[key]); // location의 href를 건드려서 정보를 가져옴? 강의시간2:40
        }
    }
</script>

 

<p>브라우저 주소 표시줄과 관련된 객체</p>
<button onclick="test3();">BOM - location객체</button>
<script>
    function test3(){
        // 전부 같음
        window.location = "http://www.naver.com";    // GET http://127.0.0.1:5500/3_JavaSrcript/WebContent/views/www.naver.com 404 (Not Found)
        location = "http://www.naver.com";           // GET http://127.0.0.1:5500/3_JavaSrcript/WebContent/views/www.naver.com 404 (Not Found)
        location.href = "http://www.naver.com";      // GET http://127.0.0.1:5500/3_JavaSrcript/WebContent/views/www.naver.com 404 (Not Found)
        location.replace('http://www.naver.com');    // GET http://127.0.0.1:5500/3_JavaSrcript/WebContent/views/www.naver.com 404 (Not Found)
        location.href.replace('http://www.naver.com');  // GET http://127.0.0.1:5500/3_JavaSrcript/WebContent/views/www.naver.com 404 (Not Found)
    }
</script>

 

1)location.href

페이지 이동

a태그 뿐 아니라 버튼에도 해당 링크로 갈 수 있게 만들 수 있다

location.href=주소 사용 - 네이버로 이동

location=주소 사용 - 네이버로 이동


 

2)reload()

페이지를 새로고침하는 메소드

위치를 유지하는게 차이점

다른 새로고침은 새로 고치고 페이지 상단으로 가지면 reload()는 새로고침한 자리 유지

<!-- 페이지 새로고침 3가지 방법 -->
<button onclick="location=location">location=location</button>  <!-- 새로고침 후 화면 상단으로 돌아감  -->
<button onclick="location.href=location.href">location.href=location.href</button> <!-- 새로고침 후 화면 상단으로 돌아감 -->
<button onclick="**location.reload()**">location.reload()</button> <!-- 현재 위치에서 새로고침 -->

 

3)assign()과 replace()

두 메소드 모두 location의 href 를 재지정하는 메소드(페이지이동)

assign()

화면을 전환하면, 웹 브라우저 뒤로가기 버튼을 누를시 뒤로 이동하기 이전 화면으로 이동 다음 페이지로 이동하면서 현재 페이지를 히스토리에 남김

replace()

replace의 경우는 그렇지 않다는 것

뒤로가기 시 전 페이지들을 대체 다음 페이지로 이동하면서 현재 페이지를 히스토리에 남김x

 

차이

둘 다 페이지를 다른 URL 로 이동시키지만

히스토리를 남기느냐 남기지 않느냐의 차이

홈페이지 이동 경로
인덱스 -> bom -> GOOGLE -> naver -> daum

뒤로가기 했을 때 assign은 BOM페이지가 나오고 replace는 index페이지가 나옴

 


 

D.history객체

브라우저 방문기록과 관련된 객체

몇번째 페이지로 이동할껀지 번호로 한번에 이동가능

 

1)history.back() : 뒤로가기

2)history.forward() : 앞으로가기

<button onclick="history.back();">history객체 - history.**back**()</button> 뒤로가기
<button onclick="history.forward();">history객체 - history.**forward**()</button> 앞으로가기
<br><br>

<input type="number" id="num"><button onlick="test4();">history객체 - go() </button>
<script>
    function test4() {
        var num = document.getElementById('num').value;
        history.**go(**num);
        // 홈페이지 이동 경로
        // 인덱스 -> bom -> kh -> naver -> daum  
        //   -1       0      1      2        3  
        // 현재위치는 BOM이고 숫자로는 0이 기준점
        // 1 입력하면 kh, 3 입력하면 daum으로 이동

    }
</script>

 

3)history.go(-1)

.go를 통해서 .back()이나 .forward() 기능구현 가능 ex) history.back() = history.go(-1)

<button onclick="history.go(-1);">history객체 - go back</button>
<!-- 이전 페이지 -->
<button onclick="history.go(1);">history객체 - go forward</button>
<!-- 이후 페이지 -->
728x90
반응형
728x90

 

Window Object(윈도우 객체)

브라우저 창에 대한 설정을 하는 객체

 

window객체는 자바스크립트의 최상위 객체, BOM/DOM으로 나뉨

BOM(Browser Object Model) : 브라우저에 관련된 객체. ex) location, navigator, history, screen객체

DOM(Document Object Model) : document객체. 문서 자체에 관계가 있는 모델들을 담아둠

 

 

window.open()

브라우저 새로 띄우기

window.open(주소창, 열려는 창 이름, 넓이, 높이)

window.open 반환값 새로 만들어진 창 객체가 반환됨. 창의 생성에 실패하면 null을 반환 이 객체를 통해서 새창을 제어할 수 있다. 예로 popup.close() 로 창을 닫기 가능

function test1() {
  // window.open();                            // 비어있는 새탭이 열림
  // window.open("01_JavaScript.html");        // 01번html문서 열림
  // window.open("<http://www.naver.com>");      // 네이버 열림
  window.open('<http://www.naver.com>', '네이버', 'width=500, height=300');      
// 네이버 열림 + 팝업 + 창크기 지정 // '네이버' : 창에 대한 이름 지정 // 크기지정하면 해당 크기의 팝업으로 뜸

}

 

 

popup.document.write()

팝업 창 띄우기

function test2() {          
// var popup = window.open('', '', 'width=300, height= 200'); // 비어있는 팝업창이 뜸                
popup.document.write('<html><body><h2>짜잔! 새로운 팝업 탄생잉요!</h2></body></html>');
}

 

window객체의 timer메소드

setTimeout()

몇 밀리초 후에 함수를 호출

function test3(){
  window.open(', ', 'width=500, height=300');

  myWindow.alert('3초 후에 이 페이지는 종료됩니다.'); // myWindow 팝업창에 안내창 뜸 
  
  // 알림창 3초 후에 제거
  // window.setTimeout()
  
  myWindow.alert('3초 후에 이 페이지는 종료됩니다.');
  // myWindow 팝업창에 안내창 뜸 
  window.setTimeout(function() {
          myWindow.close();   // // 닫아줌 언제? 3초 뒤에 (1초 = 1000)
  },3000);
}

close() : window를 닫음

 

 

setInterval()

지정한 시간마다 매개변수로 넘겨준 함수를 실행

// 목적 : 버튼을 누르지 않아도 시간이 실시간으로 바껴서 화면에 보이는 것
function test4() {
    var area4 = document.getElementById('area4');

    // window.setInterval()
    **window.setInterval**(function(){
    var date = new Date();      // 시간을 나타낼거라고 했으니. 시간을 나타내는 객체 date
    area4.innerHTML = date.getHours() + " : " + date.getMinutes() + " : " + date.getSeconds();                              
    // 밸류가 아니니 innerHTML
    }, 1000); // 시간이 바뀌는 기준 1초 // 1000 1초마다 내용 바뀌게 할 것이니 단위는 1000

 

 

new Date()

시간을 나타내는 객체 Date

var date = **new Date()**;      // 시간을 나타낼거라고 했으니. 시간을 나타내는 객체 date
area4.innerHTML = date.**getHours**() + " : " + date.**getMinutes**() + " : " + date.**getSeconds**();                              
// 밸류가 아니니 innerHTML
728x90
반응형
728x90

 

객체(Object)

 

객체 선언 및 호출

중괄호{}를 사용하여 객체를 생성하고, 속성에는 모든 자료형이 올 수 있음 객체는 키 값을 사용하여 속성 식별

 

<button onclick="test1();"> 객체 생성 </button>
<script>
    function test1(){
        var product = {         // 중괄호 { } : 객체
            pName: 'Dry Mango',
            type: 'pickle',
            ingredient:['mango', 'sugar'],
            origin: 'Philippines'
        };
        console.log(product);

 

 

 

객체 안의 속성 접근 2가지 방법

1)객체명['속성명']
2)객체명.속성명

1)객체명['속성명']

console.log(product['pName']);
console.log(product['type']);
console.log(product["ingredient"]);
console.log(product["origin"]);

2)객체명.속성명

console.log(product.pName);
console.log(product.type);
console.log(product.ingredient);
console.log(product.origin);

 

 

 

속성접근 방법 차이

방법2의 접근법은 키 안이 완벽한 상태여야 사용가능
띄어쓰기가 있으면 키 자체가 불완전해서 사용불가
띄어쓰기는 [ ] 대괄호 접근방법 사용

var objTest = {
    'k$ey':'value1',
    'k_ey':'value2',
    'k ey':'value3',
};

console.log(objTest['k$ey']);       //  객$체명
console.log(objTest['k_ey']);       //  객_체명
console.log(objTest['k ey']);       //  객 체명

console.log(objTest.k$ey);
console.log(objTest.k_ey);
//console.log(objTest.k ey);    //  에러 
// 키에 특수문자 대괄호로 감싸줘야함
// 키로써 모든게 완벽할 때 .쓸 수있지만, 띄어쓰기는 키 자체가 불완전하기 때문에 에러
// 띄어쓰기 쓸려면 []로 속성에 접근해야함

 

 

 

객체의 메소드 속성

function test2() {
    var satoori = {         // 중괄호{ } : JS의 객체
        area1:'전라도',     // area1:'전라도'을 필드라고 볼 수 있음
        area2:'경상도',
        song: function(act){    // 함수. song은 함수를 가지고 있기 때문에 메소드 역할을 함
            var area2 = '강원도'; 
            console.log(this.area1 + '와 ' + this.area2 + '는 ' + act); // 객체 안의 area1 ,area2, 매개변수로 받아온 act 출력
        }   // this를 붙이기 싫으면 변수 선언을 이 안에서 해줘야함.
    };      // this가 있어야 객체 안에있는 속성을 찾음. 
            // this를 붙이면 경상도, 안붙이면 강원도 

    satoori.song('사이가 좋다'); // area1 is not defined 에러
    // 객체를 변수satoori에 넣었고, 이 변수를 호출 했는데 에러발생
    // why? 
    // 객체 안에서 내 속성을 호출할 때는 반드시 앞에 this.가 들어가있어야함
    
    // 객체 내에서 쓰면 내 속성을 호출하는거기 때문에 
    // 여기에서는 객체 안에서 쓰면 외부에 있는 내 속성을 호출할 때 쓰는 것
    // this를 안붙이고 쓸려면 function(act)안에 area1,2가 존재해야한다
    // this가 있어야 객체 안에 속성을 찾음 -> 객체 안 함수의 내에서 함수 밖이자 객체 안의 속성값을 쓸려면 this를 붙여야한다
    
    // this 있으면 함수 외부(객체의 속성)
    // this 없으면 함수 내부

 

 


 

 

객체와 반복문

객체의 속성을 살펴볼때는 단순 for문으로는 불가능하고 for in문 사용해야함
‘배열’을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김 ’객체’를 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 객체의 키가 담기게 됨.

function test3() {
    var movie = {
        title:'신비한 동물들과 덤블도어의 비밀',
        release: '2022-04-13',
        director: '데이빗 예이츠',
        mainActor: ['에디 레드메인','주드 로','매즈 미켈슨','댄 포글러','앨리슨 수돌'],
        screening : true
    };

// for in문에서 배열을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김
// for in문에서 객체를 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 객체의 키가 담기게 됨  
    for(var i in movie) {
        console.log(i); // 객체의 key값들이 찍힘. title release director mainActor screening
        console.log(i + " : " + movie[i]); // i = 키값 + movie[i] = 밸류값
    }
    // 비어있는 객체
    // {}
}

 

 


 

 

객체 속성 추가 및 제거

처음 객체 생성 이후 속성을 추가하거나 제거하는 것을
'동적으로 속성을 추가/제거한다'라고 함

1)객체 속성 추가

// 설명
student.name                //스튜턴드의 네임을 가져오는 코드
student.name = '강건강';    //스튜턴드의 네임을 가져온 것에 강건강을 집어넣은 것
                            //속성도 만들어주고 값도 집어넣는 것

 

방법1

.으로 객체 안 속성 접근하는 방법

// 객체 속성 추가 방법1 : .으로 객체 안 속성 접근하는 방법
student.name = '강건강';    // {name:강건강} // key=name value='강건강'
	// student.name 코드는 원래는 스튜던트에있는 name을 가져오는거였는데,
	// = 으로 값을 대입하고 있으니
	// student라는 객체의 name 이라는 속성에 
	// 강건강을 집어넣음. 
	// 이런식으로 값도 넣을 수 있다는것임.
student.hobby = '운동'; // {hobby:운동}

 

방법2

대괄호[]로 객체 안 속성 접근하는 방법

function test4() {
    var student = {};   // 비어있는객체

		// 객체 속성 추가 방법2 : 대괄호[]로 객체 안 속성 접근하는 방법
		student['strength'] = '100m 달리기'; // 객체{} 안에 
    student['dream'] = '체육관 관장';    // 키값 'strength'와 밸류값 100m 달리기'를 추가
		
}

// 객체 속성 추가 완료 및 확인
console.log(student); // {name: '강건강', hobby: '운동', strength: '100m 달리기', dream: '체육관 관장'}
student.toString = function() { // toString이라는 메소드를 만들어주는것.  
  var str = '';               // 그 객체의 대표값을 나타내는구나 알수 있으니 toString으로 이름을 해주는것. 
  
  for(var key in this){       // this는 student를 의미함
      if(key != 'toString'){  // 강의시간 11:19   // if문 추가이유 : toString 빼고 나머지 넣으라고 
          str += key + " : " + this[key] + " // ";  // this[key] : student의 속성을 가져온다는 의미 ex)'운동','100m 달리기'
      }
  }
  return str;

오른쪽 파란색 드래그영역 부분을 제외하고 출력하기 위해서 if문의 조건을 넣은 것

 

2)객체 속성 제거

delete(변수명.키명);

delete(student.hobby); // delete(변수명.키명);
  • 후에 공부할 것 : hoisting & prototype이게 왜 일어났는지 이 상황을 이해하려면 prototype(콘솔에서 나오는 그 프로토타입)과 hoising 공부해야함js를 깊게 공부하고 싶다면 hoising,prototype 공부 // 몰라도 js 사용가능hoisting : 선언과 할당을 나눠서 하는 것분리한거에 따라서 undefined가 뜰 수 있는데 hoising 때문
  • 나중에 그 값들을 채워넣는 것. 분리해서 하는걸 hoising이라고 함
  • 선언하고 할당을 분리시키는 것
  • 프로토타입은 많이 어려워서 먼저 공부할거면 hoising만 추천
  • 위에 삭제하기 전 console.log 호출했을 때, hobby가 삭제된채로 출력된게 왜 그렇게 적용이 된건지

 

 


 

 

객체 배열

배열 추가 : Array.push(), Array.unshift(), Array.splice()
배열 삭제 : Array.pop(), Array.shift(), Array.splice()

function test5(){
	var student0 = {name: '강건강', java:85, oracle:13, HTML:94, CSS:53, js:99};
  var student1 = {name: '남나눔', java:39, oracle:55, HTML:52, CSS:78, js:47};
  var student2 = {name: '도대담', java:42, oracle:87, HTML:85, CSS:14, js:74};

	var students = [];
  students.push(student0);    // Array.push() : 배열 추가
  students.push(student1);
  students.push(student2);

	for(var i in students) {    // i의 값 : 배열의 인덱스 
    // 학생 과목 총점 도출 함수
    students[i].getSum = function(){ // students[i] : i번째 student객체
        var sum = 0;
        for(var key in this) {   // 객체 안에 들어왔으니 this
             if(key != 'name' && key != 'getSum' && key != 'getAvg') {
                sum += students[i][key];    // students[i] : 배열 안에 있는 i번째의 객체
                                            // students[i][key] key라고 하는 객체의 속성값을 가져오겠다는 코드
            // 숫자들의 합이니 name, getSum 을 빼고 더하겠다. 과목들의 합을 더해서 sum에 담음.
            }
        }
        return sum; // 과목들의 합을 담은 sum 리턴
    }    
    
    // 학생 평점 도출 함수
    students[i].getAvg = function(){    
        return this.getSum() / 5;
    }

    // 전체 데이터 출력 기능(@override toString 같은 역할)
    for(var i in students) {
        console.log('이름 : ' + students[i].name + ", 총점 : " 
                + students[i].getSum() + ", 평균 : " + students[i].getAvg());
    }
  }
}

 

728x90
반응형
728x90

 

함수 선언

1.선언적 함수

함수function에 이름을 집어넣는 것 선언적함수라함

<button onclick="test1();"> 선언적 함수 </button>
<script>
    function test1(){
        console.log('test1함수 실행'); // 선언적 함수
    }
</script>

2.익명 함수

fuction 뒤에 함수명이 없는 함수 함수를 변수에 넣고 변수명으로 호출

이유 : 호출할려해도 이름이 없기에 변수에 넣고 변수명으로 대체

<button onclick="test2();"> 익명 함수 </button>
<script>
    var test2 = function**()** {    // fuction 뒤에 이름이 없는 함수
       // 함수를 변수에 넣고 변수명으로 호출
        console.log('test2함수 실행'); // 
    }
</script>

 


 

함수 전달인자와 매개변수

1.매개인자로 전달하기

지정된 매개변수보다 많은 개수를 호출하는 것을 허용, 초과된 인자는 무시됨
지정된 매개변수보다 적은 개수를 호출하는 것을 허용, 전달되지 않은 매개변수는 undefined

함수 위아래 2개가 있고 위의 함수(익명함수)가 아래 함수(선언적 함수)를 호출하는 형태

위쪽 익명함수가 test3(인자o), test3(인자x) 순으로 아래 선언적함수를 2번 호출하는 형태

<script>
  document.getElementById('btn1').onclick = function(){ // getElement로 속성 접근. 클릭하면 해당 함수를 실행하라는 의미
    test3('안녕','반가워');
    test3();    // 자바에서 매개변수 있는 메소드에 매개변수 전달 안하면 
                // 에러가 났는데, 얘는 undefined를 출력
                // 지정된 매개변수보다 적은 개수를 호출하는 것을 허용, 전달되지 않은 매개변수는 undefined
  }
  function test3(value){  // 매개변수 1개인데 위의 test3는 2개이므로 자바라면 에러나지만, js는 오류 안나고 실행됨. 반가워는 안찍힘
    console.log('test3호출');   // test3호출
    console.log(value);         // 안녕 // 위의 test3('안녕','반가워');에서 인자가 안녕,반가워 2개인데 value로 앞의 '안녕'만 들어감
                                // undefined // 두번째로 test3()로 호출되서 test3()에서는 인자가 없으므로 undefined
    console.log(arguments); // Arguments(2) ['안녕', '반가워', callee: ƒ, Symbol(Symbol.iterator): ƒ]
                            // Arguments [callee: ƒ, Symbol(Symbol.iterator): ƒ]    // test3()의 호출. 인자가 없으므로 argument도 받은 인자x
    // arguments : 내가 넘겨 받아온 것을 다 담아오는 것 // arguments 처음 사용
    // 안녕,반가워를 위에서 받은거를 arguments에 다 배열로 저장하는 식
  }
</script>

arguments

넘겨받은 모든 인자들을 저장해두는 ‘배열’

ex)안녕,반가워를 위에서 받은거를 arguments에 다 배열로 저장

(대괄호[]로 남겨있는걸 보면 배열인걸 알 수 있음)

js내장함수

 

 

2.매개인자로 스스로를 전달하기

2가지 방법

방법1 : 인자 직접 설정

button 태그 test4() 안 매개변수인 js,jquery를 function test4(subject) 안에 넣어주고 얘는 다시 alert(subject)로 넣어준다

<button onclick='test4("JavaScript--");'>방법1 : JavaScript</button>
<button onclick='test4("jQuery--");'>방법1 : jQuery</button>
<script>
  // 방법1
// 인자 직접 설정해주는 것이 가장 간단한 방법
// button 태그 test4() 안 매개변수인 js,jquery를 
// function test4(subject) 안에 넣어주고 얘는 다시 alert(subject)로 넣어준다
  function test4(subject){    
      alert('오늘 배울 내용은 '+ subject + '입니다.');    // 오늘 배울 내용은 jQuery--입니다.
  }
</script>

 

방법2 : this를 통한 button 요소값 전달 + innerHTML

button 태그 test5() 안 매개변수인 this는 버튼의 내용인 '방법2 : JavaScript'를 인자로 받아 function test5(subject) 안에 넣어주고 얘는 여기서 다시 alert(subject.innerHTML)로 넣어준다

<button onclick='test5(this);'>방법2 : JavaScript</button>
<button onclick='test5(this);'>방법2 : jQuery</button> <!-- this : 지금 현재 내가 있는 곳에 대한 코드를 의미 -->
<script>
  // 방법2
	// this를 통한 button 요소값 전달 + innerHTML
// button 태그 test5() 안 매개변수인 this는 버튼의 내용인 '방법2 : JavaScript'를 인자로 받아  
// function test5(subject) 안에 넣어주고 얘는 여기서 다시 alert(subject.innerHTML)로 넣어준다
  function test5(subject){   
  // 온클릭 this에서 함수 파라미터인 subject에 넣을 때 뭐라고 찍히나 확인해보자   
      console.log(subject) // <button onclick='test5(this);'>JavaScript</button>
      alert('오늘 배울 내용은 '+ subject.innerHTML + '입니다.'); // 오늘 배울 내용은 방법2 : jQuery입니다.
  }
</script>

 

 

 

3.함수의 리턴처리

함수에서 다른 함수를 호출하여 리턴값 받아오기

test6() 함수에서 값을 리턴하는 returnFunc()함수를 호출하여 test6()에서도 값 리턴할 수 있게 만든 구조

<button onclick="test6();">함수 리턴처리</button>
<script>
  function test6(){
      // 반환타입이 없다고 리턴할 수 없는건 아님
      var ran = returnFunc ();
      alert(ran); // 알림창으로 값 리턴됨 : 68.4503529682732
  }
  function returnFunc(){
      return Math.random() * 100 + 1; // Math.random() : 랜덤값 부여 함수. 범위:0~1까지
      // test6()에 리턴해줌. 위의 test6()함수의 ran 변수가 해당 함수의 리턴값을 받아 담음. 
  }
</script>

<innerText & innerHTML 차이>

// innerText : 해당 태그의 텍스트만 가져온다
function setInnerText()  {
    const element = document.getElementById('content');
    element.innerText = "<div style='color:red'>A</div>"; -> 출력값 : <div style='color:red'>A</div>
}

// innerHTML : html 요소를 적용시킨 상태에서 값을 반환한다. 즉, html의 태그들을 적용시키고 태그사이의 값을 반환한다
function setInnerHTML()  {
    const element = document.getElementById('content');
    element.innerHTML = "<div style='color:red'>A</div>"; -> 출력값 : (빨간색 글씨) A
}

자료출처 : https://hianna.tistory.com/480

 

 

4.매개변수로 함수 전달

함수도 매개변수로 전달하고 리턴받을 수 있음

내부 로직 설명

1)button test7(calledFunction)의 calledFunction인자가 function test(v)의 매개변수인 (v)로 들어감 2)v();의 v에는 calledFunction이 담겨있으므로 아래의 fuction calledFunction(){} 함수를 호출

 

<button onclick='test7(calledFunction);'> 매개변수로 함수 전달</button>
<script>
  function test7(v){  // v가 calledFunction을 받아옴
      v();     //실행시키면 v가 calledFunction을 실행시키게 됨 
  }
  function calledFunction(){
      alert('calledFunction 실행');   // calledFunction 실행
  }
// 내부 로직 설명
// 1)button test7(calledFunction)의 calledFunction인자가 function test(v)의 매개변수인 (v)로 들어감
// 2) v();의 v에는 calledFunction이 담겨있으므로 아래의 fuction calledFunction(){} 함수를 호출
</script>

 

5.함수 리턴

함수에서 다른 함수를 호출하여 리턴값 받아오기

내부 로직 설명

1)button 태그에서 test8()함수 호출

2)function test8() 함수 내부에서 return 으로 함수 리턴시킴

3)return으로 받아온 함수가 button test8()을 들어감

받아온 함수 실행을 위해 button test8()에 소괄호()를 추가

<!-- function 받아와서 실행시켜줘야해서 onclick="test8()();"에다가 ()소괄호 추가 -->
<button onclick="test8()();">함수 리턴</button> <!-- 실행을 위한 소괄호() 한번 더 붙임 -->
<script>
  function test8(){     
    return function(){  // 함수 반환    // 익명함수
        alert('함수 반환 성공');   // 결과값이 아무것도 나타나지는 않으나 펑션을 반환받음. test8이 펑션 자체임
    }  // 내가 받아온 것을 실행시키기 위해 button test8()에 ()를 추가. 실행시켜야되니 뒤에 소괄호 한번 더 붙여줌
}      // function test8()에서 button test8()으로 펑션만 받아온거지 실행한게 아니라서 실행용 소괄호를 넣어줘야함
</script>

 

 


 

내장 함수

1. eval()

문자열을 JS코드로 변환해서 실행시켜주는 함수

내장함수 eval()

<input type="text" id="test1"><button onclick="test9();"> 내장함수 : eval()</button>
    <script>
        function test9(){
            var test = document.getElementById('test1').value;
            console.log(test); // 1+1   // // input창에 있는 입력값이 콘솔에 잘 출력됨. 
            console.log(eval(test));    // 1+1을 입력하면 2를 출력함.     
            //문자열을 자바스크립트 코드로 변환해서 실행을 시켜주는것. 
            // 1+1 문자열이 아닌 자바스크립트 코드로 변환을 하니 
            // 계산식이 되어 2가 출력된것. 

            var str = '';
            str += 'var num1 = Number(prompt(" 2"));';
            str += 'var num2 = Number(prompt(" 2"));';
            str += 'var sum = num1 + num2;';
            str += 'alert(num1 + " + " + num2 + " = "+ sum);';
            
            console.log(str); 
            eval(str);  // eval()을 통해 진짜 코드로 바꿔보겠다

        }
    </script>

 

2.infinity & NaN

infinity와 NaN을 찍어보면 넘버타입

 

방법1 : == 사용

infinity는 ==, isFinite() 둘다 가능 NaN는 isNaN()만 가능

 

방법2 : isFinite() & isNaN() 사용

isFinite 유한한지,정해진 수가 있는지 물어보는 것 isFinite()를 쓰면 매개변수 안에 숫자가 유한한지 물어보는 거기 때문에 무한인 Infinity니가 들어가면 false로 뜨는 것

NaN은 == 비교 불가능(isNaN으로 확인해야함)

function test10(){
  var num1 = 10 / 0; // -> 자바에서 이러면 바로  ArithmeticException예외
  var num2 = 10 / '강건강' ;
  console.log(num1); // Infinity
  console.log(num2); // NaN(Not a Number)

  // 에러가 나지 않고 콘솔창보면 인피티니와 NaN(Not a Number)이 뜸
  // 데이터 확인해보면 str이 아닌number 타입이 나옴

  console.log(typeof num1); // number타입
  console.log(typeof num2);

  // 인피와 nan인지 아닌지 확인방법  
  // 방법1
  // num1 == Infinity
  console.log(num1 == Infinity);  // true
  // 방법2
  // isFinite 유한한지 정해진 수가 있는지 물어보는 것
  console.log(isFinite(num1));    // false
  // Infinity니까 무한하지

  console.log(isNaN(num2));       // true
  console.log(num2 == NaN); 
  // 이렇게는 안됨, isNaN으로 확인해야함.

  // 음의 무한대와 양의 무한대가 존재함
  var num3 = -10 /0 ;
  console.log(num3);// 음의 무한대
  console.log(num3 == -Infinity); // true // 인피티 앞에 마이너스(-) 붙음
}

 

 

 

 

 

728x90
반응형
728x90

 

배열(Array)

자바스크립트에서는 자료형 지정이 없기 때문에 한 배열 안에 모든 자료형 보관 가능

 

1.배열 선언 및 초기화

배열 선언 시 크기를 지정하지 않고 선언할 수도 있고 크기를 정하고 선언할 수도 있음

function arrayTest2(){
  var arr1 = new Array();     // 배열 선언
  var arr2 = new Array(3);    // 배열 및 배열 길이 선언
  console.log('arr1.length : ' + arr1.length);
  console.log('arr2.length : ' + arr2.length);

  // length가 0이면 값 삽입 불가능? 확인 ㄱ
  

  // 배열 추가
  arr1[0] = '사과';
  arr1[1] = '귤';
  arr1[2] = '바나나';
  arr1[3] = '딸기';       // 4번째 인덱스에 추가됨. 
  // 배열 길이 0으로 지정해놔도 데이터 계속 들어갈 수 있음

  console.log('arr1.length : ' + arr1.length);
  console.log(arr1);

  // 알아서 값이 증가하면서 값도 받아옴
  arr2[0] = '지하철';
  arr2[1] = '기차';
  arr2[2] = '비행기';

  console.log('arr2.length : ' + arr2.length);
  console.log(arr2);
  

  // 초기화 의미 : 객체 선언을 하고 값을 최초로 할당하는 것

  // 선언과 동시에 초기화 방법1 -  강의시간 12:20
  var arr3 = new Array('빨강', '초록', '파랑');
  console.log('arr3.length : ' + arr3.length);
  console.log(arr3);

  // 선언과 동시에 초기화 방법2
  var arr4 = ['java','oracle','jdbc','html','css','javascript'];
  console.log('arr4.length : ' + arr4.length);
  console.log(arr4);  // ['java','oracle','jdbc','html','css','javascript']
}

 

2.배열 메소드

 

indexOf()

해당 요소가 위치한 인덱스 번호 반환

없으면 -1반환

function methodTest1(){
    var arr = ['사과', '포도', '배', '바나나', '감', '키위', '복숭아'];
    console.log(arr.indexOf('바나나'));    // 3. 해당 요소가 위치한 인덱스 반환
    console.log(arr.indexOf('토마토'));    // 배열에 존재하지 않는 값이기에 -1 반환
}

 

concat()

이어 붙이기

function methodTest2(){
    var arrl = ['빨강', '노랑', '초록'];
    var arr2 = ['파랑', '보라'];

    console.log(arr1.concat(arr2)); // ['빨강', '노랑', '초록',//'파랑', '보라']
    console.log(arr2.concat(arr1)); // ['파랑', '보라',//'빨강', '노랑', '초록']
    
    // 메소드 체인 가능
    onsole.log(arr2.concat(arr1).concat(arr1).concat(arr2));
}

 

join()

결합해서 ‘문자열’로 반환

join()은 parameter 지정안하면 ,으로

지정하면 지정한 값(구분자)을 넣어서 구분하여 반환

  • 밑에 toString()과 비슷
<button onclick="methodTest3();">배열 메소드 : join()</button>
<script>
    function methodTest3(){
        var arr = ['강남', '역삼', '선릉', '교대'];
        console.log(arr.join());    // 강남,역삼,선릉,교대
        console.log(typeof arr.join()); // string

    }
</script>

 

reverse()

배열의 값을 뒤집어서 반환

function methodTest4(){
  var arr = [1, 2, 3, 4, 5, 6, 7];
  console.log(arr.reverse());     // [7, 6, 5, 4, 3, 2, 1]
  var arr2 = ['a','b','c','d','e'];
  console.log(arr2.reverse());    // ['e', 'd', 'c', 'b', 'a']
}

 

sort()

배열 값을 정렬 : 안에 들어온 값들을 문자열로 변환해서 문자열 정렬

간단한 문자열 숫자는 숫자로 변환하여 숫자 정렬하고 다음 영어 정렬한다

function methodTest5(){
    var arr = [10, 543, 34, 450, 123, 885];
    console.log(arr.sort());    // [10, 123, 34, 450, 543, 885]

    var arr = ['b', 10, 543, 34, 450, 123, 'a']; 
    console.log(arr.sort());    // [10, 123, 34, 450, 543, 'a', 'b']

		// console.log(a.sort());    //  ['4', 5, 'a', 'b', 'c']    str4를 숫자4로 바꾸고 4,5..순으로 정렬

    // 숫자로 정렬하고 싶을 때 방법
    var sortArr = arr.sort(function(left, right){
                    return left-right; // 내림차순
                    return right-left; // 오름차순
                // 뺄셈을 이용해 누가 더 큰지 알아내고 이를 기반으로   자리를 바꿀지 말지 정한다.
// 레프트 라이트
// 양수 왼쪽값이 더 큼 왼쪽값이 더 크면 안되니 ... 뺄셈을 이용해서 누가 더 큰지 비교
// 자동으로 큰수를 넣는거 그 이후                    
        }
    );
    console.log(sortArr);
}

 

push() & pop()

 - push : 마지막에 요소 추가 <-> unshift // 길이 반환

 - pop : 마지막 요소 꺼내오기 <-> shift // 제거된 요소 반환

       (꺼내오며 마지막 요소가 배열에서 삭제됨)

function methodTest6(){
  var arr = ['김고은', '한예슬', '신민아', '전지현', '손예진', '김소연'];
  arr.push('유인나'); // 마지막에 유인나 추가됨
  console.log(arr);   // ['김고은', '한예슬', '신민아', '전지현', '손예진', '김소연', '유인나']

  arr.push('송혜교'); 
  console.log(arr);   // ['김고은', '한예슬', '신민아', '전지현', '손예진', '김소연', '유인나', '송혜교']

  console.log(arr.push('유인나')); // 9 : 푸쉬가 되고 난 다음에 사이즈가 나오는것

  arr.sort();

  console.log(arr);
  console.log("========")
  console.log(arr.pop()); // 마지막 요소 꺼내오기(꺼내오며 마지막 요소가 배열에서 삭제됨)
  console.log(arr);   
  arr.pop();              // 마지막 요소 꺼내오기(꺼내오며 마지막 요소가 배열에서 삭제됨)
  console.log(arr);
}
// push : 마지막 요소에 추가
console.log(a);           // (5) ['4', 5, 'a', 'b', 'c']
console.log(a.push());    //  5     <- 콘솔에서는 소트된 상태에서 원래 배열의 마지막값 5를 반환
console.log(a.push(6));   //  6    
console.log(a);           // (6) ['4', 5, 'a', 'b', 'c',6]
console.log(a.push())       // 6 // 파라미터 안적으면 배열의 길이 반환(?)
console.log(typeof(a.push()));    //  number

 

shift() & unshift()

 - shift : 첫번째 요소 제거하고, 제거된 요소를 반환 <-> pop // 제거된 요소 반환(str 반환)

 - unshift : 맨 앞에 요소 추가하고, 추가한 길이를 반환 <-> push // 길이 반환(number 반환)

(method) Array<string>.shift(): string

(method) Array<string>.unshift(...items: string[]): number

function methodTest7(){
    var arr = ['야구', '축구', '농구', '배구', '탁구'];
    console.log(arr);         // ['야구', '축구', '농구', '배구', '탁구']

    arr.shift();              // 야구 삭제
    console.log(arr);         // ['축구', '농구', '배구', '탁구']
    console.log(arr.shift()); // 축구
    console.log(arr);         // ['농구', '배구', '탁구']

    arr.unshift('ㅁ');          // ㅁ 추가
    console.log(arr.unshift()); // 4    길이 반환
    console.log(arr);           //  ['ㅁ', '농구', '배구', '탁구']
}

 

slice() & splice()

slice()

slice(start idx, end idx) 끝 인덱스 미포함(-1)해서 엘리먼트 추출

splice()

splice(start idx, end idx, 대체할 idx) a부터 b개까지 c의 값으로 변경

function methodTest8(){
    var arr = ['자바', '오라클', 'JDBC', 'HTML', 'css', 'JavaScript']; // 끝 인덱스 미포함해서
    console.log(arr.slice(2, 4));   // ['JDBC', 'HTML']
    console.log(arr);               // ['자바', '오라클', 'JDBC', 'HTML', 'css', 'JavaScript']
    
    console.log(arr.splice(0, 2, 'Spring')); // ['자바', '오라클'] // 0부터 2개 빼내고 spring을 추가하겠다는 코드
    console.log(arr);       // ['Spring', 'JDBC', 'HTML', 'css', 'JavaScript']

}

 

toString()

join()과 비슷

차이는

toString() : 무조건 ','로 구분지어 반환

join()은 parameter 디폴트는 ',' 들어가고 지정하면 지정한 값(구분자)을 넣어서 각 값을 연결하여 반환

toString() → 무조건 ,쉼표 구분자로 합쳐서 문자열로 연결되어 나옵니다 ≒ join

function methodTest9(){
  var arr = ['잠은', '보약이다', '잠은', '죽어서 자는게', '아니다', '그건', '죽은거다'];
  console.log(arr.toString()); // 잠은,보약이다,잠은,죽어서 자는게,아니다,그건,죽은거다
  console.log(arr.toString('ㅁ'));
  console.log(arr);            // ['잠은', '보약이다', '잠은', '죽어서 자는게', '아니다', '그건', '죽은거다']

  console.log(arr.join());     // 잠은,보약이다,잠은,죽어서 자는게,아니다,그건,죽은거다
  console.log(arr.join('/'));  // 잠은/보약이다/잠은/죽어서 자는게/아니다/그건/죽은거다

  console.log(arr); 

}

 

728x90
반응형
728x90

조건문과 반복문

 

1. 조건문

a. if문

<button onclick="ifTest();">if버튼</button>
<script>
  // 실습 예제
// 당신의 성별은 무엇입니까? 라고 묻는 알람창이 뜨고 그 알람창에는 값을 입력할 수 있는 필드가 있음
// 필드에는 '남자/여자'라는 값이 자동으로 들어가 있는 상태
// 남자라고 입력하면 "XY입니다", 여자라고 입력하면 "XX입니다", 둘다 아니면 "잘못 입력했습니다"
// 라는 문구가 알람창으로 뜨게 하기
 function ifTest(){  
    var gender = prompt('당신의 성별은 무엇입니까?','남자/여자');
    
        if(gender == '남자'){
            console.log("XY입니다")
        }else if(gender == '여자'){     
            console.log("XX입니다")
        }else{
            console.log("잘못 입력했습니다")
        }
// 당신의 성별은 무엇입니까? 라고 묻는 알람창이 뜨고 그 알람창에는 값을 입력할 수 있는 필드가 있음
// 필드에는 '남자/여자'라는 값이 자동으로 들어가 있는 상태  
//    -> var gender = prompt('당신의 성별은 무엇입니까?', '남자/여자');
   }
</script>

 

b. switch

<button onclick="switchTest();">switch문</button>
    <script>
        function switchTest(){ 
            var month = Number(prompt("현재는 몇 훨입니까?")); // prompt가 문자열 반환이라 문자를 숫자로 바꿔줘야함.
            console.log(typeof(month));  // 디버깅용 타입확인. 숫자인 것 같은데 비교가 안되는 상황이 자주 발생하니
            var day;
            switch(month){
                case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                    day = 31; break;
                case 4: case 6: case 9: case 11:
                    day = 30; break;
                case 2:
                    day = 28;
                }
                alert(month + "월은 " + day + "일까지입니다.");
            }
            
    // '현재는 몇 휠입니까? '라고 묻는 알람창이 뜨고 그 알람창에는 값을 입력할 수 있는 필드가 있음
    // 입력을 하고 나면 'M월은 N일까지입니다' 라는 결과가 알람창에 뜨게 하기

    </script>

 

2. 반복문

a. for문

<h4>for</h4>
  <button onclick="forTest();">for문</button>
  <script>
      function forTest(){
          var result = '';
          for(var i = 1; i<=10; i++){
              result += i + ' ';
          }
          alert(result);  // 1 2 3 4 5 6 7 8 9 10출력
      }
  </script>

 

b. while문

<h4>while문</h4>
    <button onclick="whileTest();">while문</button>
    <script>
		function whileTest(){
			var result = '';
			var i = 1; 
			while(i<=10){
				result += i + ' ';
				i++;
			}
			alert(result);   // 1 2 3 4 5 6 7 8 9 10
		}
    </script>

 

c. for in문

객체의 프로퍼티 키 열거 전용

자바 foreach랑 비슷

for in문에서 배열을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김 for in문에서 객체를 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 객체의 키가 담기게 됨

<button onclick="forInTest();">for in문</button>    <!-- 자바 foreach랑 비슷함 -->
    <script>
        function forInTest(){
            var result = '';
            var array = ['A', 'B', 'C', 'D', 'E'];

            for(var i in array){    // i의 디폴트값 0
                // for in문에서 배열을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김
                console.log(i);     // 01234 <- 배열의 인덱스
                result += array[i] + ' ';
            }
            alert(result);          // A B C D E 

           /* 
            // 자바에서 이런식으로 사용
            for(Emp e : list){
                System.out.prinln(e);   
            }

            */
        }
    </script>

 

forEach()문

배열 순회 전용 메서드

forEach(function(item, index, arr){ ... })

item : 배열의 각 대상을 의미

index : 배열의 순서를 의미 (현재 몇번째 반복문이 돌고있는지)

arr : forEach 반복문에 사용되는 배열을 의미

 

자바스크립트 반복문 종류

1. for : 고전적인 for문

2. for in : 객체의 프로퍼티 키 열거 전용

3. for of : 이터러블 순회 전용

4. forEach(): 배열 순회 전용 메서드

5. while : 고전적인 while문

6. do while : 고전적인 do...while문

7. Object 객체 메서드: 객체 순회 전용

8. Array.prototye 메서드 : 배열 전용

https://curryyou.tistory.com/202

728x90
반응형

+ Recent posts