const toDoForm = document.querySelector(".js-toDoForm"),
toDoInput = toDoForm.querySelector("input"),
toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = "toDos";
const toDos=[];
// JSON.stringfy
// JSON = JavaScript Object Notation 의 준말. 자바스크립트 오브젝트 표기법
// ex) Object 를 String으로 혹은 String을 Object로 바꿔주기도 한다.
// localStorage key값으로는 Object가 못들어간다. 오직 String만
// 그래서 String으로 변환해야 정상적으로 key값에 들어가는걸 확인할 수 있다.
function saveTodos() {
localStorage.setItem(TODOS_LS, JSON.stringify(toDos))
}
function paintToDo(text) {
const li= document.createElement("li");
const delBtn = document.createElement("button");
const span = document.createElement("span");
const newId = toDos.length+1
delBtn.innerHTML="X";
span.innerText = text;
li.appendChild(span);
li.appendChild(delBtn);
li.id=newId
toDoList.appendChild(li);
const toDoObj = {
text : text,
id : newId
};
toDos.push(toDoObj);
saveTodos();
}
function handleSubmit(event){
event.preventDefault();
const currentValue = toDoInput.value;
paintToDo(currentValue);
toDoInput.value="";
}
// forEach는 array를 위한 function이다.
// 이와 같은 예로 String도 function이 있고
// Object도 function이 있다.
function loadToDos(){
const loadedToDos=localStorage.getItem(TODOS_LS)
if(loadedToDos !== null){
const parsedToDos = JSON.parse(loadedToDos);
parsedToDos.forEach(function(toDo) {
paintToDo(toDo.text);
});
}
}
function init() {
loadToDos();
toDoForm.addEventListener("submit",handleSubmit)
}
init();
이번 강의에선 브라우저에 출력해놓은 toDoList를 localStorage
key / vlaue 값에 저장하고 그 저장된 값을 브라우저 새로고침을 해도 똑같이 리스트들이 나오게 하는 기능을 추가했다.
첫 번째로 key / value 값에 저장하기 위해 목록 리스트를 담을 배열 변수를 선언해주고
saveToDos() 함수를 생성하고 정의해준다.
두번째로 저번 강의에 만든 loadToDos 함수를 정의해주는데
localStorage의 값을 가져오는 함수를 작성해주고 value값들은 Object로 바꿔주는 JSON.parse를 사용해서 가져온다.
그리고 배열을 위한 function으로 forEach 함수를 사용해서 리스트들은 하나씩 가져와서 브라우저에 리스트로 생성해주는 paintToDo함수를 사용해준다.
다음 강의에서는 버튼을 누르면 list가 삭제되는 기능을 구현해보겠다.
#3.6 Making a To Do List part Three (12:03)
const toDoForm = document.querySelector(".js-toDoForm"),
toDoInput = toDoForm.querySelector("input"),
toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = "toDos";
let toDos=[];
function deleteToDo(event){
const btn = event.target;
const li = btn.parentNode;
toDoList.removeChild(li);
const cleanToDos = toDos.filter(function(toDo){
return toDo.id !== parseInt(li.id);
});
toDos=cleanToDos;
saveTodos();
}
// JSON.stringfy
// JSON = JavaScript Object Notation 의 준말. 자바스크립트 오브젝트 표기법
// ex) Object 를 String으로 혹은 String을 Object로 바꿔주기도 한다.
// localStorage key값으로는 Object가 못들어간다. 오직 String만
// 그래서 String으로 변환해야 정상적으로 key값에 들어가는걸 확인할 수 있다.
function saveTodos() {
localStorage.setItem(TODOS_LS, JSON.stringify(toDos))
}
function paintToDo(text) {
const li= document.createElement("li");
const delBtn = document.createElement("button");
const span = document.createElement("span");
const newId = toDos.length+1
delBtn.innerHTML="X";
delBtn.addEventListener("click",deleteToDo);
span.innerText = text;
li.appendChild(span);
li.appendChild(delBtn);
li.id=newId
toDoList.appendChild(li);
const toDoObj = {
text : text,
id : newId
};
toDos.push(toDoObj);
saveTodos();
}
function handleSubmit(event){
event.preventDefault();
const currentValue = toDoInput.value;
paintToDo(currentValue);
toDoInput.value="";
}
// forEach는 array를 위한 function이다.
// 이와 같은 예로 String도 function이 있고
// Object도 function이 있다.
function loadToDos(){
const loadedToDos=localStorage.getItem(TODOS_LS)
if(loadedToDos !== null){
const parsedToDos = JSON.parse(loadedToDos);
parsedToDos.forEach(function(toDo) {
paintToDo(toDo.text);
});
}
}
function init() {
loadToDos();
toDoForm.addEventListener("submit",handleSubmit)
}
init();
이번 강의에서는 list를 지우는 기능을 추가할 것이다.
첫 번째로 버튼의 addEventListener를 생성한다. click 이벤트 발생 시 deleteToDo함수 호출되게
이후 deleteToDo함수를 정의해보자면
첫번째로 버튼을 클릭했을 때 consold.log를 확인해보면 버튼은 클릭된다는 걸 확인할 수 있는데
어떤 리스트의 버튼이 클릭되는지 확인이 불가하다 .그래서 확인이 가능하게 해주는. target을 이용해서
부모 태그인 <li>의 id를 알아내기 위해 parentNode를 사용해서 추출해낸다.
추출 후 html태그에서의 removeChild를 이용해 지워주면 html상 즉 브라우저상에서는 사라진 list를 확인할 수 있다.
하지만 새로고침하면 사라진 list가 다시 생성이 되는데 이는 지워준 리스트 항목들로 교체를 하지 않았기 때문이다.
교체해주기 위해서는 .filter함수를 사용할 건데 안의 콜백 함수의 조건? 에 부합하는 값들로 새로운 Array를 만들어준다.
그러니까 1,2,3 가지의 리스트가 있고 리스트 1의 버튼을 눌러 삭제를했으면 2,3, 의 리스트가 남아 있을 거고 이건 브라우저에 보이는 2,3 리스트이다. 하지만 localStoarage에서는 안 없어져 1,2,3의 리스트가 존재하고 2,3 이남은 Array와 1,2,3, 이 남은 Array를 비교해서 값이 다른 부분을 버리고 남은 부분으로 새롭게 Array를 만들어주는 것
그렇게 새롭게 만든 Array를 toDos에 넣어주고 saveToDos()를 이용해서 새롭게 초기화해준다.
2021-01-19
#3.7 Image Background (13:47)
배경에 사진 넣기
unsplash.com 에서 괜찮은사진 다운로드 받기
const body =document.querySelector("body");
const IMG_NUMBER = 3;
// function handleImgLoad() {
// console.log("finished loading");
// }
function paintImage(imgNumber){
const image = new Image();
image.src=`./images/${imgNumber+1}.jpg`;
image.classList.add("bgImage");
body.prepend(image)
// API환경에서 이 작업을 한다면 이 이벤트리스터가 필요할 것.
//image.addEventListener("loadend",handleImgLoad)
}
function genRandom(){
const number = Math.floor(Math.random()*IMG_NUMBER);
return number;
}
function init(){
const randomNumber = genRandom();
paintImage(randomNumber);
}
init();
사진을 다운로드후
bg.js 파일을생서후 배경화면에대한 함수정의하기
Math 함수를 이용해서 난수발생시키고 거기에 floor 내림 함수를 적용시켜서 사진수만큼 난수발생시킨 숫자를 담는
randomNumber 변수에 넣어 그변수 값을 인자값으로 받는 paintImage 함수 정의 .
const toDoForm = document.querySelector(".js-toDoForm"),
toDoInput = toDoForm.querySelector("input"),
toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = "toDos";
const toDos=[];
// JSON.stringfy
// JSON = JavaScript Object Notation 의 준말. 자바스크립트 오브젝트 표기법
// ex) Object 를 String으로 혹은 String을 Object로 바꿔주기도 한다.
// localStorage key값으로는 Object가 못들어간다. 오직 String만
// 그래서 String으로 변환해야 정상적으로 key값에 들어가는걸 확인할 수 있다.
function saveTodos() {
localStorage.setItem(TODOS_LS, JSON.stringify(toDos))
}
function paintToDo(text) {
const li= document.createElement("li");
const delBtn = document.createElement("button");
const span = document.createElement("span");
const newId = toDos.length+1
delBtn.innerHTML="X";
span.innerText = text;
li.appendChild(span);
li.appendChild(delBtn);
li.id=newId
toDoList.appendChild(li);
const toDoObj = {
text : text,
id : newId
};
toDos.push(toDoObj);
saveTodos();
}
function handleSubmit(event){
event.preventDefault();
const currentValue = toDoInput.value;
paintToDo(currentValue);
toDoInput.value="";
}
// forEach는 array를 위한 function이다.
// 이와 같은 예로 String도 function이 있고
// Object도 function이 있다.
function loadToDos(){
const loadedToDos=localStorage.getItem(TODOS_LS)
if(loadedToDos !== null){
const parsedToDos = JSON.parse(loadedToDos);
parsedToDos.forEach(function(toDo) {
paintToDo(toDo.text);
});
}
}
function init() {
loadToDos();
toDoForm.addEventListener("submit",handleSubmit)
}
init();
이번 강의에선 브라우저에 출력해놓은 toDoList를 localStorage
key / vlaue 값에 저장하고 그 저장된 값을 브라우저 새로고침을 해도 똑같이 리스트들이 나오게 하는 기능을 추가했다.
첫 번째로 key / value 값에 저장하기 위해 목록 리스트를 담을 배열 변수를 선언해주고
saveToDos() 함수를 생성하고 정의해준다.
두번째로 저번 강의에 만든 loadToDos 함수를 정의해주는데
localStorage의 값을 가져오는 함수를 작성해주고 value값들은 Object로 바꿔주는 JSON.parse를 사용해서 가져온다.
그리고 배열을 위한 function으로 forEach 함수를 사용해서 리스트들은 하나씩 가져와서 브라우저에 리스트로 생성해주는 paintToDo함수를 사용해준다.
다음 강의에서는 버튼을 누르면 list가 삭제되는 기능을 구현해보겠다.
#3.6 Making a To Do List part Three (12:03)
const toDoForm = document.querySelector(".js-toDoForm"),
toDoInput = toDoForm.querySelector("input"),
toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = "toDos";
let toDos=[];
function deleteToDo(event){
const btn = event.target;
const li = btn.parentNode;
toDoList.removeChild(li);
const cleanToDos = toDos.filter(function(toDo){
return toDo.id !== parseInt(li.id);
});
toDos=cleanToDos;
saveTodos();
}
// JSON.stringfy
// JSON = JavaScript Object Notation 의 준말. 자바스크립트 오브젝트 표기법
// ex) Object 를 String으로 혹은 String을 Object로 바꿔주기도 한다.
// localStorage key값으로는 Object가 못들어간다. 오직 String만
// 그래서 String으로 변환해야 정상적으로 key값에 들어가는걸 확인할 수 있다.
function saveTodos() {
localStorage.setItem(TODOS_LS, JSON.stringify(toDos))
}
function paintToDo(text) {
const li= document.createElement("li");
const delBtn = document.createElement("button");
const span = document.createElement("span");
const newId = toDos.length+1
delBtn.innerHTML="X";
delBtn.addEventListener("click",deleteToDo);
span.innerText = text;
li.appendChild(span);
li.appendChild(delBtn);
li.id=newId
toDoList.appendChild(li);
const toDoObj = {
text : text,
id : newId
};
toDos.push(toDoObj);
saveTodos();
}
function handleSubmit(event){
event.preventDefault();
const currentValue = toDoInput.value;
paintToDo(currentValue);
toDoInput.value="";
}
// forEach는 array를 위한 function이다.
// 이와 같은 예로 String도 function이 있고
// Object도 function이 있다.
function loadToDos(){
const loadedToDos=localStorage.getItem(TODOS_LS)
if(loadedToDos !== null){
const parsedToDos = JSON.parse(loadedToDos);
parsedToDos.forEach(function(toDo) {
paintToDo(toDo.text);
});
}
}
function init() {
loadToDos();
toDoForm.addEventListener("submit",handleSubmit)
}
init();
이번 강의에서는 list를 지우는 기능을 추가할 것이다.
첫 번째로 버튼의 addEventListener를 생성한다. click 이벤트 발생 시 deleteToDo함수 호출되게
이후 deleteToDo함수를 정의해보자면
첫번째로 버튼을 클릭했을 때 consold.log를 확인해보면 버튼은 클릭된다는 걸 확인할 수 있는데
어떤 리스트의 버튼이 클릭되는지 확인이 불가하다 .그래서 확인이 가능하게 해주는. target을 이용해서
부모 태그인 <li>의 id를 알아내기 위해 parentNode를 사용해서 추출해낸다.
추출 후 html태그에서의 removeChild를 이용해 지워주면 html상 즉 브라우저상에서는 사라진 list를 확인할 수 있다.
하지만 새로고침하면 사라진 list가 다시 생성이 되는데 이는 지워준 리스트 항목들로 교체를 하지 않았기 때문이다.
교체해주기 위해서는 .filter함수를 사용할 건데 안의 콜백 함수의 조건? 에 부합하는 값들로 새로운 Array를 만들어준다.
그러니까 1,2,3 가지의 리스트가 있고 리스트 1의 버튼을 눌러 삭제를했으면 2,3, 의 리스트가 남아 있을 거고 이건 브라우저에 보이는 2,3 리스트이다. 하지만 localStoarage에서는 안 없어져 1,2,3의 리스트가 존재하고 2,3 이남은 Array와 1,2,3, 이 남은 Array를 비교해서 값이 다른 부분을 버리고 남은 부분으로 새롭게 Array를 만들어주는 것
그렇게 새롭게 만든 Array를 toDos에 넣어주고 saveToDos()를 이용해서 새롭게 초기화해준다.
const age = prompt("How old are you");
if ( age>=18 && age <=21 ) {
console.log("you can drink but yon should not")
}else if ( age<18) {
console.log("you cant")
}
else{
console.log("go ahead")
}
prompt를 이용해서 웹페이지가 시작되었을 때 alert와 같은 경고창을 띄울 수 있는데 이는 아주 오래된 JavaScript라서
잘 안 쓰인다고 한다 그냥 그렇다고 한다.
다시 코드를 넘어와서 prompt로 나이를 받아와 조건문을 이용해서 console로그에 띄운 걸 확인할 수 있다.
그리고 console.log를 사용해서 lswinfo.gender를 조회했다 한번 생각해보자.
console.log와 lswinfo.gender의 비슷한 점을 이렇게 적어놓고 나서 보니. log ,. gender 중간에. 이 있는걸
확인할 수 있는데 lswinfo는 Object이다. 이렇듯 console.log 또한 Object임을 알 수 있다.
console.log 는 자바스크립트 안에 있는 것.
console이라는 Object가 있고 log라는 키가 있다.
그리고 이경우의 log는 function(함수)인 것.
하지만 Object이지.
만약 console 오브젝트를 console.log로 찍어보면 어떻게 나올까
Object인 console은 lswinfo보다 더 큰 오브젝트이다.
여기서 보듯이
브라우저가 가지고 있는 자바스크립트는 object에 넣을 수 있다.
이게 우리가 어떻게 자바스크립트가 생겼는지에 대한 매우 좋은 시각을 가질 수 있을 거라고 생각한다.
이제 하나 궁금한 점이 생길 수 있는데
console.log는 어디에서 온 것일까?
console.log, alert 등 우리가 곧 볼 다른 많은 함수들은
내장 함수(built-in function)이라고 한다.
함수(function)란?
function is function
어떤 것의 기능, 기능적인 거
함수는 어떤 걸 수행하려는 한 부분으로,
내가 원하는 만큼 쓸 수 있다.
여기까지 이것이 함수.
한 코드 조각으로 내가 원하는 만큼 쓸 수 있는 것!
예를 들어 console.log로 hello라고 찍히게 하는 코드 조각을 갖고 싶다고 하자.
그리고 함수를 가지고 있지 않다면 그냥 console.log('hello')라고 쓸 것이다.
4번 한다고 하면 마찬가지로 4번을 반복해서 써야겠지.
하지만 인사말을 바꾸고 hello sunwoo , 같이 사람이 계속 바뀐다면 매번 코드를 수정해야 하는
불편함이 있다. 이는 효과적이지 않고 프로그래머들은 게으르다 필요 없는 코드는 필요하지 않다.
console.log('hello')
console.log('hello, lynn)
console.log('hello, sunwoo)
console.log('hello)
// 매우 귀찮다.
우리가 필요한 건 이름을 받아와서 내가 무슨 이름을 주든 hello 해주는 게 나오는 함수가 필요하다.
자바스크립트에서 어떻게 함수를 만들 수 있을까?
먼저 우리가 해야 할 건 function을 주는 것.
그리고 함수 이름을 주는 것이다.
함수의 이름은 sayHello라고 하자.
function sayHello() {
}
바로 이것이 자바스크립트의 함수 정의하는 문법이다.
그리고 이 함수 안에 하나의 인스트럭션을 넣을 것이다.
넣고 나서 함수를 벗어나서 sayHello();라고 쓰면
sayHello();는 Hello라고 나오는 걸 확인할 수 있다.
function sayHello() {
console.log('hello')
}
sayHello()
이것이 이 수업에서 만든 첫 함수이다.
우리는 이제 sayHello를 이용해서 다른 친구들에게도 인사를 건네려고 한다.
건네기 전에 우리는 console.log를 이용해서 복습을 해보자
우리가 여태껏 console.log를 사용해서 콘솔 창에 출력을 해본 경험을 바탕으로 생각해 봤을 때
console.log("hello") ( ) 안에 있는 내용을 출력한다는 걸 예상할 수 있는데 이걸 보고 생각할 때
함수는 ( ) 안에 있는 내용을 사용한다는 걸 확인할 수 있다 그리고 이와 마찬가지로
sayHello("선우") 이렇게 작성한다면 hello 선우 가 출력되지 않을까라고 생각할 수 있는데
실제로 실행해보면 실행이 잘되지 않는 걸 확인할 수 있다. 왜 그런지 생각해보자
일단 첫 번째로 ( ) 사이에 있는 것을 인자(argument)라고 한다.
인자(argument)는 변수 같은 것이다.
그리고 우리 함수는 인자(argument)를 받아 저장을 한다.
그래서 우리는 함수 sayHello를 준비시켜야 한다.
우리가 주는 인자(argument)를 가지고 갈 수 있도록 말이다.
함수를 준비하는 방법은 ( ) 안에 뭘 써주는 것
함수를 만드는 시점에 ( ) 안에 인자(argument)를 넣는 것이다.
뭐든 우리가 원하는 이름을 넣어도 된다.
function sayHello(potato) {
console.log('Hello', potato)
}
sayHello("sunwoo")
여기에 들어간 이름은 위에서 말했듯 변수 같은 것
그리고 parameter 혹은 argument라 불린다.
설정해준 이름은 함수 안에서 사용하게 될 이름이 된다.
그리고 함수를 쓰고 ( ) 안에 무언가를 찾아서 있다면 자바스크립트는 () 안에 들어간 내용을 사용하게 된다.
작동이 잘되는 걸 확인할 수 있고
자바스크립트에서 하는 것은 sunwoo를 potato에 넣고 potato는 console.log 안에 들어가게 되는 것이다.
이것이 외부에 있는 데이터를 읽는 함수를 만드는 방법이다.
함수에게 외부에 있는 데이터를 주는 방법
console.log 함수는 argument를 무한대로 가질 수 있다.
#2. 1 More Function Fun (10:24)
자바스크립트에서는 "" 도 스트링이고 ' ' 도 스트링이다.
만약 큰따옴표로 시작했으면 큰따옴표로 끝내야 하고 작은따옴표 또한 마찬가지이다.
그리고 위에서의 방식으로는 스트링 안에 변수를 집어넣지 못한다.
변수를 넣으려면 "" + 변수 이런 식으로 작성해야 한다
이 방식이 불편해 자바스크립트는 ` ` 백 틱이라는 걸 사용해서 쓸 수 있다.
` ` 을 사용하면 스트링 안에 변수를 넣을 수 있다. 아래 코드를 봐보자.
function sayHello(name, age) {
console.log(`Hello ${name}, you are ${age} years old`);
}
console.log("sunwoo",99);
위 코드를 보면 스트링 안에 변수를 집어넣을 수 있는 걸 확인할 수 있다.
출력또한 잘된다.
함수에는 return을 줄 수 있는데 return은 쉽게 생각하면 물건을 살 때 돈을 지불하고 잔돈을 받는 그런 느낌이다.
return을 보기 전에 아래 코드를 한번 확인해보자.
function sayHello(name, age) {
console.log(`Hello ${name} you are ${age} years old);
}
const greetSunwoo = sayHello("sunwoo",99);
console.log(greetSunwoo);
상수 const greetSunwoo는 sayHello를 호출한다.
함수 sayHello는 console.log를 사용해 무언가를 출력해낸다.
그러고 나서 console.log에 greetSunwoo를 넣으면 정의되지 않았다 나온다.
여기서 헷갈릴 수 있는데 다시 차근차근 생각해보자.
greetSunwoo는 sayHello의 실행된 결과 값이다.
sayHello에서는 아무것도 반환하지 않았다.
그래서 greetSunwoo는 단지 하나의 console.log를 갖게 된다.
이 말이 맞는지 확인해봐야 할 건 sayHello에 무언가를 반환시켜보는 것이다.
function sayHello(name, age) {
return`Hello ${name} you are ${age} years old`;
}
console.log(greetSunwoo);