생활코딩 - WEB2 - JavaScript

  | #Github#Jekyll

WEB2 JavaScript - 3.HTML과 JS의 만남 : script 태그

생활코딩-자바스크립트
WEB2 JavaScript - 3.HTML과 JS의 만남 : script 태그

javascrip를 사용하려면 스크립트 선언을 해주어야한다.

    <body>
      <script>
      여기 안쪽에 있는 태그를 자바스크립트로 인식한다.
      </script>
    </body>

    <body>
    1.  <h1>JavaScrips</h1>
        <script>
          document.write('hello world');
    2.  </script>
        <h1>html</h1>
        hello world
    이 두개가 무엇이 다르냐?

  • 1+1을 입력했을 때 (javascript는 document.write(‘1+1’)로 입력)
    • html : 1+1로 나옴
    • JavaScrip : 2로 나온다.
      html은 정적
      javascript는 동적






4.HTML과 JS의 만남 : 이벤트

1. 목차1번 (Apple)

생활코딩-자바스크립트
WEB2 JavaScript - 4.HTML과 JS의 만남 : 이벤트

body사이에

<input type="button" value="text">
    하면 버튼이 만들어지고 안에 글씨는 value에 넣으면 된다.
여기에 alert 창을 만들고 싶다면

    <input type="button" value="text" onclick="alert('alert')">

웹브라우저에서 일어나는 일

  • 사건, EVENT.
<input type="text" onchange="alert(changed)">
: 검색창같이 글씨를 쓸 수 있는 칸이 생기고
  onchange를 넣으면 칸에 글씨를 쓰고 마우스 커서를 밖에다 클릭하면 alert 라는 창이 뜬다.
  : 칸에 글씨를 쓰면 내용이 변한다. 그 내용이 변할 때 EVENT를 체크하는 자바스크립트이다.
  글씨를 쓰고 다시 지우면 해당하지 않는다.

웹브라우저 위에서 일어나는 여러가지 사건들 중에 기념할만한 것들 몇가지 10~20개 정도의 EVENT를 정의해놓고 있다. 이것을 이용해서 사용자와 상호작용하는 웹사이트를 만들 수 있다.


검색하기

javascript keydown event attribute검색

<input type="text" onkeydown="myFunction()">
검색하니 이런 코드가 나온다
이 코드를 쓰면 텍스트를 쓸 수 있는 칸이 나오고
하나만 써도 alert이 뜬다.

[자바스크립트] 키보드 이벤트 (keydown/keyup)by Dale Seo






WEB2 JavaScript - 5.HTML과 JS의 만남 (콘솔)

생활코딩-자바스크립트
WEB2 JavaScript - 5.HTML과 JS의 만남 (콘솔)

페이지검사 - Console 로 가면 파일을 만들지 않고도 자바스크립트를 실행할 수 있다.
예를들어 아무 텍스트를 Console에 복붙하고 복붙을 text라고 했을 때
‘text’ 따옴표로 묶어주면 따옴표 사이가 문자 가 된다.
javascript는 문자의 개수를 알려주는 기능이 있다 : length
alert(‘text’.length) 하고 enter를 누르면 문자의 개수가 alert로 뜬다.


페이지검사-메뉴 중 element 클릭하고 esc를 누르면 element탭 바로 밑에 console이 같이 뜨게된다.

강의 요약 : console기능을 사용하면 지금 보고 있는 웹페이지를 대상으로 자바스크립트가 실행된다.






WEB2 JavaScript - 6.데이터타입 - 문자열과 숫자

생활코딩-자바스크립트
WEB2 JavaScript - 6.데이터타입 - 문자열과 숫자

google - javascrips data type 검색
https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures Primitive(기본자료형)인 여섯가지 데이터 타입

  • Boolean
  • Null
  • Undefined
  • Number
  • String
  • Symbol (ECMAScript 6에 추가됨)

이번 시간엔 목록 중 5번째인 Number를 다뤄볼 것임

number에서 중요한 것은 연산이다 +, - …

2-1
-> 1
2*4
-> 8
6/2
-> 3
"Hello world"
'Hello world'
-> 큰따옴표로 시작하면 큰따옴표로 끝나고 작은 따옴표로 ''
'Hello world'.length
-> 11
'Hello world'.toUpperCase()
-> HELLO WORLD가 된다. : 소문자가 대문자가 됨
'Hello world'.indexOf('O')
-> -1 : 찾을 수 없다고 나옴 저 문자에 대문자 O가 없기 때문
'Hello world'.indexOf('o')
-> 4 : 순서가 0,1,2,3,4,로 되어있어서 5번째에 o가 있다는 게 4로 나온 것
'Hello world'.indexOf('world')
-> 6
'        hello      '치면 공백이 살아있다.
'        hello      '.trim() 라고하면
-> 'hello' : 공백을 없애준다.
"1"+"1"
->11 : "1"은 문자열이기 때문에 11이 된다.
"hello"+" world"
-> hello world






WEB2 JavaScript - 7.변수와 대입 연산자

생활코딩-자바스크립트
WEB2 JavaScript - 7.변수와 대입 연산자
x=1;
->1
y=1;
->1
x+y;
->2
1=2;
-> 에러가 남 : 숫자 1은 항상 1이기 때문에 상수(바뀌지 않는 수) 영어로는 constant라고 한다. variable vs constant

스크립트를 실행할 때 : enter
실행을 유보할 때 : shift+enter


example 아주 긴 문장이 있는데 그 안에 example이라는 단어가 100개 정도 나온다. 그 단어를 다른 단어로 한번에 바꿀 일이 있을 수 있다면 ?

먼저 변수를 example로 설정해주자
var word = ‘example’;

“Her courage is an example to us all. “ 이라는 문장이라면
“Her courage is an “+word+” to us all.” 라고 치면
-> “Her courage is an example to us all.” 라고 나오게 된당.






WEB2 JavaScript - 8.웹브라우저 제어

생활코딩-자바스크립트
WEB2 JavaScript - 12.제어할 태그 선택하기
<body>
  <h1><a href="javascripts.html">WEB</a></h1>
  <input type="button" value="night">
  <input type="button" value="day">
</body>

input type=”button” 으로 night, day 버튼을 만들어준다. night 버튼을 누르면 배경이 검은색, 글씨가 하얀색으로 변하고 day 버튼을 누르면 위와 반대로 변하게 만들 것이다.

click을 하면 바껴야하므로
<span style=color:blue> click에 대한 이벤트를 만들어줘야한다. 그 뒤에 onclick=”” 을 쓰고 저 안에 쓸 자바스크립트를 만들어줘야한다. </span> 자바스크립트의 특성을 따라서 body 태그를 “선택” 하도록 해주어야 한다.
자바스크립트로 태그를 선택하려면 어떻게 해야하는지 검색해보자

구글 검색 - javascript select tag by css selector
https://developer.mozilla.org/ko/docs/Web/API/Document/querySelector

element = document.querySelector(selectors)

이렇게 나온다. selectors : tag

<body>
  <h1><a href="javascripts.html">WEB</a></h1>
  <input type="button" value="night" onclick="
  document.querySelector('body')" >
  <input type="button" value="day">
</body>

만약에 body태그에 id = “target”이라고 썼다면 querySelector(‘#target’) 이라고 쓰면됨

이제 자바스크립트로 body부분을 지목해주었으니 색깔을 변경해야한다.

자바스크립트로 element style을 어떻게 변경하는지 검색해보자.

구글 - javascript element style 검색 https://www.w3schools.com/jsref/prop_html_style.asp

<body>
  <h1><a href="javascripts.html">WEB</a></h1>
  <input type="button" value="night" onclick="
  document.querySelector('body').style.backgroundColor = 'black';>
  document.querySelector('body').style.Color = 'white';">
  <input type="button" value="day">
</body>

.style.backgoundColor 를 적어준다. background에서 Color C 는 대문자로 .style.color 는 백그라운드 안 text를 말한다.






WEB2 JavaScript - 13.프로그램,프로그래밍,프로그래머

생활코딩-자바스크립트
WEB2 JavaScript - 13.프로그램,프로그래밍,프로그래머
  HTML JAVASCRIPT
컴퓨터언어 O O
프로그래밍언어 X O
  • PROGRAM
  • PROGRAMMING
  • PROGRAMMER






WEB2 JavaScript - 15. 비교 연산자와 블리언

생활코딩-자바스크립트
WEB2 JavaScript - 15. 비교 연산자와 블리언

하나의 프로그램이 하나의 흐름으로 가는 것이 아니라 조건에 따라 다르게 실행된다.


-> 여기서 ===란
비교연산자, 이항연산자 좌항과 우항을 결합해서 어떤 데이터를 만든다.
좌항과 우항을 비교하여 True, False 이 둘 중 하나의 값을 만들어내는 연산자이다.
True와 False라는 두가지 값을 묶어서 __Boolean__이라고 말한다.

Boolean 은 java script의 6가지 데이터 타입 중 하나 데이터 타입

  • Boolean : True, False 두가지 밖에 없다
  • Null
  • Undefined
  • Number : 무수히 많다
  • String : 무수히 많다
  • Symbol (ECMAScript 6에 추가됨)
<h3>1&lt2</h3>
-> 1<2라고 표현하고 싶으면 &lessthan이라는 뜻으로 &lt; 쓰면 된다.
html에서 꺽새를 인식하기 때문에 바꿔주는 것.
-> 반대로는 &gt;
<script>
  document.write(1<2)
</script>
-> 하게 되면 결과값 true가 나옴






WEB2 JavaScript - 17.조건문의 활용

생활코딩-자바스크립트
WEB2 JavaScript - 17.조건문의 활용

boolean을 어디서 쓸까?

if 뒤에는 boolean 데이터 타입이 온다.

night , day 버튼이 두 개 있는 걸 하나로 바꿀 수 있다. input에 id값을 “night_day”로 주고 if와 else를 사용하여 value 값으로 조건문을 만들었다.






WEB2 JavaScript - 18.리팩토링 중복의 제거

생활코딩-자바스크립트
WEB2 JavaScript - 18.리팩토링 중복의 제거

리팩토링이란?

우리가 코딩을 하고나면 코드가 비효율적인 면이 생기기 마련
코드 자체를 효율적이게 만들어서 유지보수하는 것.

코드 펼치기(CLICK!)
    <input id="night_day" type="button" value="night" onclick="
    if (document.querySelector('#night_day').value === 'night'){
      document.querySelector('body').style.background = 'black';
      document.querySelector('body').style.color = 'white';
      document.querySelector('#night_day').value = 'day';
    } else {
      document.querySelector('body').style.background = 'white';
      document.querySelector('body').style.color = 'black';
      document.querySelector('#night_day').value = 'night';
    }
    ">
    이 부분을 복사하여 페이지 맨 밑에도 놔두고 싶다면
    <input id="night_day2" type="button" value="night" onclick="
    if (document.querySelector('#night_day2').value === 'night'){
      document.querySelector('body').style.background = 'black';
      document.querySelector('body').style.color = 'white';
      document.querySelector('#night_day2').value = 'day';
    } else {
      document.querySelector('body').style.background = 'white';
      document.querySelector('body').style.color = 'black';
      document.querySelector('#night_day2').value = 'night';
    }
    ">
    id값을 위와 다르게 주어야한다.
    만약 10개를 복사해야한다면 id값을 10번이나 다르게 주어야할 것이다.

    그래서.
    <input type="button" value="night" onclick="
    if (this.value === 'night'){
      document.querySelector('body').style.background = 'black';
      document.querySelector('body').style.color = 'white';
      this.value = 'day';
    } else {
      document.querySelector('body').style.background = 'white';
      document.querySelector('body').style.color = 'black';
      this.value = 'night';
    }
    ">
    document.querySelector('#night_day2') 를 this로 바꿔주고
    input의 id값을 없애주면 된다


코딩 잘하는 법 : 중복을 끝까지 따라가서 제거하라!!

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

<!-- 저 위 document.querySelector('body') 부분도 4번 중복된다.
그렇다면
if 밑에다가 이렇게 써보자
var target = document.querySelector('body');  -->

<input type="button" value="night" onclick="
var target = document.querySelector('body');
if (this.value === 'night'){
  target.style.background = 'black';
  target.style.color = 'white';
  this.value = 'day';
} else {
  target.style.background = 'white';
  target.style.color = 'black';
  this.value = 'night';
}
">






WEB2 JavaScript - 20.배열

생활코딩-자바스크립트
WEB2 JavaScript - 20.배열

Syntax란?

  1. 언어- 구문론, 통사론
  2. (컴퓨터 언어의) 문법을 뜻한다.

자바스크립트에서 배열은 [ 로 시작해서 ] 로 끝난다. (대가로)

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array array의 유형은 굉장히 많다.

<body>
  <h1>Array</h1>
  <h2>Syntax</h2>
  <script>
    var friends = ["A", "B"];
    // // friends 라는 변수에
    // A, B배열이라는 새로운 데이터타입이 담겼다.
    // // 데이터타입에 freinds라는 이름을 붙인 것이라고도
    // 할 수 있겠다.
    document.write(friends.length);
    // 변수 개수가 A,B 두개니까 결과 : 2
    friends.push('C');
    // push : 변수를 추가하는 것.
    document.write(friends.length);
    // 결과 : 3
  </script>
  <h2>get</h2>
  <script>
    document.write(friends[0]);
    // friends에 첫번째가 무엇이냐. 첫번째 = 0번째
    // 결과 : A
    document.write(friends[1]);
    // 결과 : B
  </script>






WEB2 JavaScript - 21.반복문

생활코딩-자바스크립트
WEB2 JavaScript - 21.반복문
<body>
  <h1>Loop</h1>
  <ul>
  <script>
// 1.
    document.write('<li>1</li>');
    document.write('<li>2</li>');
    document.write('<li>3</li>');
    document.write('<li>4</li>');
    // 2, 3을 반복해보자
// 2.
    document.write('<li>1</li>');
    while(true){
    // while:반복문의 기본 저 가로사이에는 true or false
    // while이 true인 동안에는 while이 계속 반복적으로 실행된다.
    //  언제까지? while이 false가 될 때 까지.

    // 반복문에는 이 반복문을 언제 종료할 것인가가 필요하다.
    document.write('<li>2</li>');
    document.write('<li>3</li>');
    }
    document.write('<li>4</li>');
// 3.
//  반복문 종료를 위해서 변수를 추가한다.

    document.write('<li>1</li>');
    var i = 0 ;
    // 습관적으로 i 라는 것에 이런 역할을 시킨다
    while(i < 2 ){
      document.write('<li>2</li>');
      document.write('<li>3</li>');
      i = i + 1 ;
    // 변수를 이용하여 반복문의 종료를 부르자.
    // 2, 3번의 반복이 3번 반복되면 i 의 값이 2가 될것이다.
    //  while가로 안에 i < 3 써주자.
    }
    document.write('<li>4</li>');
  </script>
  </ul>
</body>






WEB2 JavaScript - 22.배열과 반복문

생활코딩-자바스크립트
WEB2 JavaScript - 22.배열과 반복문

중요

배열과 변수를 사용하여 변수안의 값을 리스트화 시키기


  <body>
    <h1>Loop & Array</h1>
    <h2>Co workers</h2>
    <ul>
      <li>A</li>
      <li>B</li>
      <li>C</li>
      <li>D</li>
    </ul>

    A,B,C,D가 아주 여러개라면 리스트화 시키기가 힘들 것이다.
    서로 연관된 데이터들을 담는 방법 : 배열
    배열에 담겨있는 데이터를 순차적으로 꺼내는 방법 : 반복

    <h1>Loop & Array</h1>
    <script>
      var coworkers = ['A','B','C','D']
      // A,B,C,D를 배열에 넣는다.  
      //  배열에서 각각의 항목들을 원소 : element
    </script>
    <h2>Co workers</h2>
    <ul>
      <script>
        var i = 0;
        while(i < 4){
          document.write('<li>'+coworkers[i]+'</li>');
          i = i + 1;
        }
      // document.write가 4번 실행되도록 앞 강의처럼 i 를 사용했다.
      // 위 coworkers의 배열에 A,B,C,D도 순서를 가진다. : element값.
      //  그 순서를 반복되는 반복문에서 i의 값을 사용할 수 있을 것이다.
      //  i의 값은 반복이 될 때 마다 1씩 늘어날 것이기에.
      // 하지만 여기서 문제가 하나 있다.
      //   만약 coworkers의 element가 늘어나거나 적어진다면
      //   밑에 while 가로 안 부등호 옆 숫자를 바꿔주어야 할 것이다.
      //   숫자를 안 바꾸고 element 개수를 적을 수 없을까?
      //   -> while(i < coworkers.length)  바꿔주면 된다!   
      </script>
    </ul>
  </body>






WEB2 JavaScript - 23.배열과 반복문의 활용

생활코딩-자바스크립트
WEB2 JavaScript - 23.배열과 반복문의 활용

앞서 했던 night, day 버튼으로 배경색을 바꿨을 때 하이퍼링크 색깔이 파랑색이라 잘 안보였다. night일 때 하이퍼링크 색을 더 밝혀보자

저 코드를 웹상에서 키고 - 페이지검 - console창을 키자


<console 창에서   복사해온 >

document.querySelector('a')
// 우리가 바꿔야할 부분이 하이퍼링크이기 때문에 a 부분을 찾아야한다.
// querySelector를 이용해서 한번 찾아보자.
결과 : <a href="index.html">WEB</a>// 하이퍼링크가 총 ' 4 '개인데 하나밖에 나오지않는다.
// 알아보니 querySelector는 ' a '에 해당하는 태그 첫 번째 것만 가져오는 특성이 있다고 한다.
// 이 주문으로는 안될 것 같다.
//구글에 javascript get element by css selector multiple 검색하면
// querySelectorAll 이라는 게 나온다. 한번 해보자

document.querySelectorAll('a')
결과 : NodeList(4) [a, a, a, a]
//[] 대 가로는 ' 배열 '이라는 말. 저 결과가 queryselectorall의 정확한 배열은 아니고 노드리스트를 출력하는 것이긴 하지만 배열이라고 생각하자.
// 총 4개로 잘 나오는 걸 보니 이 주문을 쓰면 될 것 같다.
var alist = document.querySelectorAll('a')
// shift + enter를 누르면 출력되지 않고 줄바꿈이 된다.
console.log(alist[0]); //console.log는 가로안에 있는 걸 출력하라는 말. 즉 alist 첫번째 부분을 출력하라는 말이다.
결과 : <a href="index.html">WEB</a>console.log(alist.length)
결과 : 4
// 배열답게 length로 개수도 출력된다.
var alist = document.querySelectorAll('a');
var i = 0;
while (i < alist.length) {
   console.log(alist[i]);
   alist[i].style.color = 'powderblue';
   i = i + 1;
}
결과
VM7490:4 <a href="index.html">WEB</a>VM7490:4 <a href="1.html">HTML</a>VM7490:4 <a href="2.html">CSS</a>VM7490:4 <a href="3.html">JavaScript</a>4

 부분을 이용하여 html if 부분에 넣어서
색을 바꾸면   같다.

처음엔 저 var alist 를 이용해서 그냥 alist.style.color라고 하면 되지않나? 라고 생각했는데 결국엔 alist의 자리 순서값이 필요하다는 걸 깨달음.






WEB2 JavaScript - 25.함수

생활코딩-자바스크립트
WEB2 JavaScript - 25.함수

함수

  • 영어로 : function
  • 객체를 배우면 : method라고 부르는 경우도 있다.
연속적인 부분을 반복시키려면 반복문 을 쓰면 된다.
하지만 반복시키려는 부분이 연속적이지 않다면?
함수를 사용하자.






WEB2 JavaScript - 26.함수 : 매개변수와 인자

생활코딩-자바스크립트
WEB2 JavaScript - 26.함수 : 매개변수와 인자

함수는 입력출력 으로 이뤄져있다.
입력

  • parameter : 매개변수
  • argument : 인자

출력

  • return

<h2>Parameter & Argument</h2>
<script>
  function onePlusOne(){
    document.write(1+1+'<br>');
  }
  onePlusOne();
  function sum(left, right){
    document.write(left+right+'<br>');
  }
  sum(2,3); //5
  sum(3,4); //7
// sum 옆 함수로 전달하는 2,3이라는 값을 : argument :인자
// function sum 옆 left, right 즉 위 2, 3 이라는 값을 받아서
//  함수 안으로 매개해주는 변수들을 : parameter : 매개변수 라고 한다.

</script>






WEB2 JavaScript - 27.함수 (리턴)

생활코딩-자바스크립트
WEB2 JavaScript - 27.함수 (리턴)



표현식 : expression이 무엇인가?

1+1
2
-> 1+1은 2에 대한 표현식 이다.
<h2>Return</h2>
<script>
  function sum2(left, right){
    return left+right;
  }
  document.write(sum2(2,3)+'<br>'); //이게 숫자 5에 대한 표현식이 되게 하고싶다.
  document.write('<div style="color:red">'+sum2(2,3)+'</div>');
  document.write('<div style="font-size:3rem;">'+sum2(2,3)+'</div>');


---------------------------------------------------------------------
  function sum(left, right){
    document.write(left+right);
  }
  이란 함수가 만들어져 있다고 한다면 sum이란 함수는
  'left값과 right를 더한 값을 출력'하는 기능을 가진 함수입니다.
  따라서 sum()함수를 호출하면 5 출력되지만,
  sum()이란 함수 자체가 5 값을 가지고 있는 것은 아닙니다.
  그래서 sum() 이용한 연산, 예를들어 sum(3,4)+6 이란 연산을 수행한다면
  7+6 연산결과가 나오는게 아니라 7 에러코드 하나가 발생합니다.
  sum()이란 함수를 이용하여 연산을 하고 싶을 경우에는
  sum()함수 안에 return값을 부여해 주어야 합니다.
</script>






WEB2 JavaScript - 29.객체 예고

생활코딩-자바스크립트
WEB2 JavaScript - 29.객체 예고

객체 : object
함수라는 것 위에서 객체라는 것이 존재하는 것

23강 코드 자료 보기
</head>
<body>
  <h1><a href="index.html">WEB</a></h1>
    <input id="night_day" type="button" value="night" onclick="
      var target = document.querySelector('body');
      if(this.value === 'night'){
        target.style.backgroundColor = 'black';
        target.style.color = 'white';
        this.value = 'day';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'powderblue';
          i = i + 1;
        }
      } else {
        target.style.backgroundColor = 'white';
        target.style.color = 'black';
        this.value = 'night';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'blue';
          i = i + 1;
        }
      }
    ">
    <ol>
      <li><a href="1.html">HTML</a></li>
      <li><a href="2.html">CSS</a></li>
      <li><a href="3.html">JavaScript</a></li>
    </ol>
    <h2>JavaScript</h2>
    <p>
      JavaScript (/ˈdʒɑːvəˌskrɪpt/[6]), often abbreviated as JS, is a high-level, dynamic, weakly typed, prototype-based, multi-paradigm, and interpreted programming language.
    </p>
</body>
</html>

함수를 이용해서 코드가 중복되지 않도록 정리해보자.

1. 위 코드에 중복된 코드를 고쳐보자.

  1. input 밑 부분을 잘라내서 head안에
    script - function nightDayHandler(){} 을 만들고 이 밑에 넣어보자.

  2. nightDayHandler();body부분 onclick 안에 넣어주자.

code보기
  <head>
    <meta charset="utf-8">
    <title></title>
    <script>
    function nightDayHandler(){
      var target = document.querySelector('body');
      if(this.value === 'night'){
        target.style.backgroundColor = 'black';
        target.style.color = 'white';
        this.value = 'day';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'powderblue';
          i = i + 1;
        }
      } else {
        target.style.backgroundColor = 'white';
        target.style.color = 'black';
        this.value = 'night';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'blue';
          i = i + 1;
        }
      }
    }
    </script>

  </head>


  <body>
    <h1><a href="index.html">WEB</a></h1>
      <input id="night_day" type="button" value="night" onclick="
        nightDayHandler();
      ">
nightDayHandler를 저 onclick안에 넣어주자

사이트를 실행시키면 night를 눌러도 버튼이 day로 변하지 않음

why?

원래 onclick 안에서 있던 부분의 thisonclick이 속해있는 태그를 가리키는 것인데 head 안으로 독립을 시켜버렸기 때문에 this 의 연결이 깨진 것.

수정하기 위해서
onclick 안의 nightDayHandler의 가로안에 (this)라고 넣어주고, head 안의 function nightDayHandler의 가로안에는 (self) 라고 넣어주자. 그리고 if 밑의 this라고 되어있는 부분들을 모두 self로 바꿔주자.
-> 잘 동작하게 된다.

2. 이제 하이퍼링크 색상을 고친 부분이 또 중복되기 때문에 그 부분을 고쳐보자.

  1. head 부분 script 에 함수를 하나 더 만든다.
    • function LinkssetColor(color){}
  2. 그 부분에 body 부분에 하이퍼링크 글씨색 변경부분을 가져온다.
function LinkssetColor(color){
  var alist = document.querySelectorAll('a');
  var i = 0;
  while(i < alist.length){
    alist[i].style.color = color;
    i = i + 1;
  }
}
code보기
<head>
  <meta charset="utf-8">
  <title></title>
  <script>
  function LinkssetColor(color){
    var alist = document.querySelectorAll('a');
    var i = 0;
    while(i < alist.length){
      alist[i].style.color = color;
      i = i + 1;
    }
  }
// function setColor(color)를 만들고
  // 밑에 회색처리된 부분을 가져온다.
    // 'powderblue'라고 적힌 부분을 color로 바꾼다.
  function nightDayHandler(self){
    var target = document.querySelector('body');
    if(self.value === 'night'){
      target.style.backgroundColor = 'black';
      target.style.color = 'white';
      self.value = 'day'
      LinkssetColor('powderblue');
      // 만든 함수 setColor()를 가져오고 가로에 원하는
      // 색을 적는다.
    } else {
      target.style.backgroundColor = 'white';
      target.style.color = 'black';
      self.value = 'night';
      // var alist = document.querySelectorAll('a');
      // var i = 0;
      // while(i < alist.length){
      //   alist[i].style.color = 'blue';
      //   i = i + 1;
      // }
      LinkssetColor('blue');
      // 만든 함수 setColor()를 가져오고 가로에 원하는
      // 색을 적는다.
      }
    }

  </script>

</head>

3. 본문의 글자색을 바꾼 부분도 함수로 묶어보자.

function BodysetColor(color)를 새로 만들고 안에 target.style.color = color; 를 넣자.
넣고 밑에 if 안 target.style.color = 'white' 를 지우고 BodysetColor('white') 로 바꾸자.
-> 그럼 작동이 되지 않는다

why?
target 자체가 function BodysetColor(color) 밑에 있는 함수안의 변수에 설정되어 있기 때문이다. 그렇게 때문에 밑에 var target = document.querySelector('body'); 이렇게 되어 있는 부분인 target 부분 즉 document.querySelector('body')target 대신에 써주자.

function BodysetColor(color){
  document.querySelector('body').style.color = color;
}
function nightDayHandler(self){
  var target = document.querySelector('body');
  if(self.value === 'night'){
    target.style.backgroundColor = 'black';
    BodysetColor('white');
    self.value = 'day'
    LinkssetColor('powderblue');

4. 본문의 배경색도 함수로 묶어보자

3번과 같은 방법으로 묶어주었다.
서로 연관된 함수와 서로 연관된 변수들을 그루핑해서 정리정돈하는 수납상자로써 객체 라는 것이 존재한다.






WEB2 JavaScript - 30.객체 쓰기와 읽기

생활코딩-자바스크립트
WEB2 JavaScript - 30.객체 쓰기와 읽기


배열 : 문서에 따라 정보를 정리정돈한다
정보를 담는 그릇 이면서 정보가 순서대로 저장된다는 특징

순서없이 저장되는 게 있지않을까?
-> 객체

var cowerkers = {} cowerkers라는 객체를 만든다는 말

객체는 { }
배열은 [ ]

<script>
  var coworkers = {
    "programmer":"A",
    "designer":"B"
  };
  document.write("programmer : "+coworkers.programmer+"<br>");
  document.write("designer : "+coworkers.designer+"<br>");
  coworkers.bookkeeper = "C"; //C라는 북키퍼를 추가하겠다.
  document.write("bookkeeper : "+coworkers.bookkeeper+"<br>");
  coworkers["data scientist"] = "D"; //이름에는 공백을 넣을 수 없다.
  //[ ] 대가로를 점 빼고 쓴다.
  document.write("data scientist : "+coworkers["data scientist"]+"<br>");
</script>






WEB2 JavaScript - 31.객체와 반복문

생활코딩-자바스크립트
WEB2 JavaScript - 31.객체와 반복문

구글에 javascript object iterate 검색
for in 으로 객체의 데이터를 가져올 수 있다.

<h2>Iterate</h2>
<script>
  for(var key in coworkers) {
    document.write(key+'<br>');
  }
  // coworkers안의 key값들을 가져오는 반복문
  // key값 : 저 위에 programmer, designer 이것들.
  // 배열에서는 순서대로 정돈되어 있기 때문에 index라는 표현을 쓴다.
  for(var key in coworkers) {
    document.write(key+ ' : ' +coworkers[key]+'<br>');
  }
</script>






WEB2 JavaScript - 32.객체프로퍼티와 메소드

생활코딩-자바스크립트
WEB2 JavaScript - 32.객체프로퍼티와 메소드

객체에는 데이터를 담을 수 있다.
배열, 숫자.. 등등
함수도 담을 수 있다.

객체에 소속된 함수
-> method
객체에 소속된 변수
-> property

<h2>Property & Method</h2>
<script>
  coworkers.showAll = function(){
    for(var key in coworkers) {
      document.write(key+ ' : ' +coworkers[key]+'<br>');
    }
    // 이렇게 하면 coworkers라는 객체의 이름이 변했을 경우 다시 입력해주어야 하거나
    // 다른 상황이 생길 수 있기 때문에 저 함수가 소속되어있는 객체를 가리키는
    // 약속된 기호가 있다 : this
    for(var key in this) {
      document.write(key+ ' : ' +this[key]+'<br>');
    }
    // 위와 똑같이 나오게된다.
    // coworkers라는 이름이 바껴도 this는 영향을 받지 않는다.

  }
  coworkers.showAll();
  // function showAll(){} 과 똑같은 표현
  // var showAll = function(){} 과도 똑같은 표현

</script>






WEB2 JavaScript - 33.객체의 활용

생활코딩-자바스크립트
WEB2 JavaScript - 33.객체의 활용


29강에서는 함수를 사용하여 중복된 부분을 정리해보았다.
이번 시간에는 객체를 사용하여 정리해보자.

  • BodysetBackgroundColor
  • BodysetColor
    처럼 앞에 body를 달아서 정리해줬었는데 body를 객체로 만들어서 정리해보자.
<script>
function BodysetColor(color){
  document.querySelector('body').style.color = color;
}
function BodysetBackgroundColor(color){
  document.querySelector('body').style.backgroundColor = color;
}

이 부분을

<script>
var Body = {
  setColor:function (color){
    document.querySelector('body').style.color = color;
  },
  setBackgroundColor:function (color){
    document.querySelector('body').style.backgroundColor = color;
  }
}

이렇게 var를 이용하여 Body를 객체로 만들어줬다.


최종 결과