생각기록

생활 코딩 WEB2 JavaScript 2 본문

강의 정리/생활 코딩 강의 정리

생활 코딩 WEB2 JavaScript 2

끼록관 2022. 11. 9. 17:04

웹브라우저 제어

 

html은 한번 바뀌면, 자기 스스로 바꿀 능력이 없는 정적언어

그것을 js로 동적으로 제어 해준다.

 

바디태그에 스타일 속성을 주기 위해서는

이 속성을 주고자 하는 태그가 누구인가를 알려주는 자바스크립트 문법

 

1.css 본질적 문법

바꾸고싶은 태그에 style 써주기

<h2 style="color:powderblue;">javascript</h2>

                    속성(프로퍼티)

 

2. 자바스크립트를 이용해 제어하고자 하는 태그를 선택하는 법

 

 


css 강의

 

<div> 아무런 기능도 없는 무색 무취의 태그

  • css, js통해 정보를 제어 하고 싶을 때 사용하는 태그
  • 전체를 차지하기 때문에 자동 줄바꿈 

전체를 쓰지않는 <span>태그

 

하나의 태그가 1억개라면?

이것을 변경하기 위해 필요한 것이 선택자

 

선택자 = 누구에게 적용할 것인지 타겟팅!!

js {  }

js라는 이름의 태그

 

.js {  }

클래스 값이 js인 태그

 

#js {  }

아이디가 js인 태그

 

클래스 - 그룹 / 반 (1학년 1반.. 학생을 그룹핑)

아이디 - 한가지 대상식별한다. / (일종의 학번 - 중복 x )

 

우선순위

그래서 포괄적인 class 위에 id를 얹어서 디자인 하는 것이 효과적이다.

 


<body>
    <h1><a href="idex.html">WEB</a></h1>
    <input type="button" value="night" onclick="
        document.querySelector('body').style.backgroundColor = 'black';
        document.querySelector('body').style.color = 'white';
    ">
    <p>야간모드/일반모드</p>
    <input type="button" value="day" onclick="
    document.querySelector('body').style.backgroundColor = 'white';
    document.querySelector('body').style.color = 'black';
    "> 
</body>

night 버튼 누르면 css 가 변경됨
day 버튼 누르면 css 가 변경됨

 


컴퓨터 프로그래밍 언어 = js

html은 프로그래밍 언어 x

 

프로그램 = 순서

순서를 만드는 행위, 사람 = 프로그래밍, 프로그래머

 

어떤 의도에 따라, 순서대로 여러 기능을 작동 시키는게 컴퓨터 일반 작동

 

html 웹페이지 묘사 언어

시간의 순서에 따라 실행되는 기능은 x

 

자바스크립트는 상호작용 하기 위해 만들어진 것

시간의 순서에 따라 웹브라우저의 여러기능이 실행되어야 하기 때문에 프로그래밍이다.

 

조건, 반복  반복문..실행..

복잡해짐에 따라 이 복잡한 순서를 정리정돈 하는 방법...등


조건문

하나의 프로그램이 하나의 흐름 x

  • 조건에 따라 다른 순서의 기능들이 실행 될 수 있도록
  • 단순한 반복문이 아닌 복잡한 업무까지 가능한 혁명적 도구

 

비교연산자

document.write(1===1);
좌항과 우항의 값이 같냐? 같다! = true를 반환함!

=== 는  비교연산자면서,

이항 연산자 (좌항 우항을 결합해 어떤 데이터를 만든다) 같다면 true값이 됨 / 틀리면, false값

true와 false 값을 합쳐서 Boolean이라고 부른다.

 
Number - 숫자는 무한이 많다..
String - 문자는 매우 많다..
Boolean - 단 두개로 이루어진 데이터 타입!
    <h3>1===1</h3>
</body>
<script>
    document.write(1 === 1);
        // === 좌항 우항이 같으면, true를 반환
</script>
<h3>1===2</h3>
<script>
    document.write(1 === 2);
</script>
<h3>1&lt;2</h3>
<!-- <꺽쇄가 태그라서 이런식으로 표기 > &lt; -->
<script>
    document.write(1 < 2);
</script>
</script>
<h3>1&lt;1</h3>
<!-- <꺽쇄가 태그라서 이런식으로 표기 > &lt; -->
<script>
    document.write(1 < 1);
</script>

 


비교 연산자, boolean, 조건문

 

if 조건문

true, false 값 Boolean이 따라온다.

true면 실행되고,

false면 실행되지 않고, 다음 코드를 읽는다.

boolean이 뭐냐에 따라 실행 순서가 달라진다.

<body>
    <h1>조건문</h1>
    <h2>program</h2>
    <script>
        document.write("1<br>");
        document.write("2<br>");
        document.write("3<br>");
        document.write("4<br>");
    </script>
    <h2>if-true</h2>
    <script>
        document.write("1<br>");
        if(true){
            document.write("2<br>");
        } else {
            document.write("3<br>");
        }
        document.write("4<br>");
        // 실행의 순서가 3없이 바뀜..
    </script>
        <h2>if-false</h2>
        <script>
            document.write("1<br>");
            if(false){
                document.write("2<br>");
            } else {
                document.write("3<br>");
            }
            document.write("4<br>");
        //2가 false니까 else안의 3이 실행됨 
        </script>
</body>

그러나 위의 코드는 좋지 않은 코드다.

조건문은 달라져야 하는데,

위의 코드는 if(flase)면, 언제나 false인 것이라 효용성이 없다

 

if ( 조건에 따라 true, false가 오도록 해야 한다. )

 

<input type="button" value="night">

 1. if  >  이버튼의 값이 night라면
2. night가 아니라면 else >  day에 썻던 코드들이 들어가도록
3. 조건문 = 현재 이 버튼의 value값이 무엇인가를 알아내야 한다
                   검색창에 JavaScript elements get value 검색

>  .value라는 프로퍼티를 쓰면 된다!

document.querySelector('#night_day').value;

value 값이 night임

콘솔에 값이 night로 찍힘

값을 변경하면, 콘솔창 값도 변경 된다.

 

응용해서 

(document.querySelector('#night_day').value === 'night')

    <input id="night_day" type="button" value="night" onclick="
        if (document.querySelector('#night_day').value === 'night'){
            document.querySelector('body').style.backgroundColor = 'black';
            document.querySelector('body').style.color = 'white';
        } else {
            document.querySelector('body').style.backgroundColor = 'white';
            document.querySelector('body').style.color = 'black';
        }
    ">

근데, 한번 더 누른다고 해서 바뀌지 않는다..

 

그럼

if문의 조건식이

true여서 적용 되다면, 태그의 값을 day로 할당해주고,

document.querySelector('#night_day').value = 'day';

false가 적용되면, 태그의 값을 night로 할당

document.querySelector('#night_day').value = 'night;

 

현재 day이면, if문이 false가 되고, else문이 실행된다. 

    <input id="night_day" type="button" value="night" onclick="
        if (document.querySelector('#night_day').value === 'night'){
            document.querySelector('body').style.backgroundColor = 'black';
            document.querySelector('body').style.color = 'white';
            document.querySelector('#night_day').value = 'day';
        } else {
            document.querySelector('body').style.backgroundColor = 'white';
            document.querySelector('body').style.color = 'black';
            document.querySelector('#night_day').value = 'night';
        }
    ">

 

 


리팩토링

공장으로 다시 보내서 개선한다.

 

코드가 비효율적일 때, 동작은 두고,

중복된 코드를 낮추고 개선하는 작업을 리팩토링이라고 한다.

 

 

버튼이 1억개라면, 온클릭 구간안

 <input id="night_day" type="button" value="night" onclick=" 

 if (document.querySelector('#night_day).value === 'night')....

">

....  이코드가 속해 있는 태그를 가르키는 특별한 키워드 this

 

 

(document.querySelector('#night_day) 는 onclick event가 속해있는 태그 자신

 = this 

를 씀으로써 id 태그로 가르킬 필요가 없다.

this.value = 현재 이벤트가 속한 태그의 값

 

중복 코드 없애기

document.querySelector('body')를 없애기 위해

var target = document.querySelector('body'); 값을 주고 중복자리에 변수 삽입

 

위의 코드를 리팩토링

중복코드와 간결하게 

    <!-- 위의 코드를 리팩토링! -->
    <!-- 중복코드 제거와 간결 -->
    <input type="button" value="night" onclick="
        
    if (this.value === 'night'){
        var target = document.querySelector('body');
        target.style.backgroundColor = 'black';
        target.style.color = 'white';
        this.value = 'day';
    } else {
        target.style.backgroundColor = 'white';
        target.style.color = 'black';
        this.value = 'night';
    }
    ">