자바스크립트 3.4~
3.4
html
<!DOCTYPE html>
<html>
  <head>
    <title>Something</title>
    <link rel="stylesheet" href="style.css" />
    <meta charset="UTF-8" />
  </head>
  <body>
    <div class="js-clock">
      <h1>00:00</h1>
    </div>
    <form class="js-form form">
      <input type="text" placeholder="what is your name?" />
    </form>
    <h4 class="js-greetings gretting"></h4>
    <!--todolist 추가html-->
    <form class="js-toDoForm">
      <input type="text" placeholder="Write a to do" />
    </form>
    <ul class="js-toDoList"></ul>
    <script src="clock.js"></script>
    <script src="gretting.js"></script>
    <script src="todo.js"></script>
  </body>
</html>
javascript
const toDoForm = document.querySelector(".js-toDoForm"),
    toDoInput = toDoForm.querySelector("input"),
    toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = 'toDos';
function paintToDo(text){
    console.log(text);
}
function handleSubmit(event){
    event.preventDefault();
    const currentValue = toDoInput.value;
    paintToDo(currentValue);
}
function loadToDos(){
    const toDos = localStorage.getItem(TODOS_LS);
    if(toDos !== null){
    }
}
function init() {
    loadToDos();
    toDoForm.addEventListener("submit", handleSubmit)
}
init();
결과

function handleSubmit(event){
    event.preventDefault();
    const currentValue = toDoInput.value;
    paintToDo(currentValue);
    //값 입력하면 제출하고 다시 wirte a to do 화면으로 넘어가기
    toDoInput.value ="";
}
결과

javascript
const toDoForm = document.querySelector(".js-toDoForm"),
    toDoInput = toDoForm.querySelector("input"),
    toDoList = document.querySelector(".js-toDoList");
const TODOS_LS = 'toDos';
function paintToDo(text){
    const li = document.createElement("li");
    const delBtn = document.createElement("button");
    delBtn.innerText = "❌";
    const span = document.createElement("span");
    span.innerText = text;
    li.appendChild(span);
    li.appendChild(delBtn);
    toDoList.appendChild(li);
}
function handleSubmit(event){
    event.preventDefault();
    const currentValue = toDoInput.value;
    paintToDo(currentValue);
    //값 입력하면 제출하고 다시 wirte a to do 화면으로 넘어가기
    toDoInput.value ="";
}
function loadToDos(){
    const toDos = localStorage.getItem(TODOS_LS);
    if(toDos !== null){
    }
}
function init() {
    loadToDos();
    toDoForm.addEventListener("submit", handleSubmit);
}
init();
결과

그런데 종종 이모지가(😍😍❌ 이런게 이모지)깨져보일때가 있는데 그럴땐 html에서
<meta charset="utf-8" />
<head>안에 저거 넣어주기 
3.5
javascript
//해야할 일을 생성했을 때 배열에 추가되도록.
const toDos = [];
function paintToDo(text){
    const li = document.createElement("li");
    const delBtn = document.createElement("button");
    delBtn.innerText = "❌";
    const span = document.createElement("span");
    span.innerText = text;
    li.appendChild(span);
    li.appendChild(delBtn);
    toDoList.appendChild(li);
    //해야할 일을 생성했을 때 배열에 추가되도록.
    const toDoObj = {
        text: text,
        id: toDos.length + 1
    };
    toDos.push(toDoObj);
}
결과

li에게도 id를 할당할거야. 그래야 나중에 버튼을 클릭했을 때 어떤 li를 지워야 하는지 알 수 있을 거니까
위 코드 좀 더 보기 이쁘게 + li에게도 id할당
//해야할 일을 생성했을 때 배열에 추가되도록.
const 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.innerText = "❌";
    span.innerText = text;
    li.appendChild(span);
    li.appendChild(delBtn);
    li.id = newId;
    toDoList.appendChild(li);
    //해야할 일을 생성했을 때 배열에 추가되도록.
    const toDoObj = {
        text: text,
        id: newId
    };
    toDos.push(toDoObj);
}
결과

값을 입력하고 요소 검사 해보면 저렇게 id가 잘 부여되는 모습을 볼 수 있어
Q. todo를 왜 이런식으로 저장하는거야?
A. local storage에도 todo를 저장해둬야 하기 때문
//해야할 일을 생성했을 때 배열에 추가되도록.
const toDos = [];
function saveToDos(){
    localStorage.setItem(TODOS_LS, 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.innerText = "❌";
    span.innerText = text;
    li.appendChild(span);
    li.appendChild(delBtn);
    li.id = newId;
    toDoList.appendChild(li);
    //해야할 일을 생성했을 때 배열에 추가되도록.
    const toDoObj = {
        text: text,
        id: newId
    };
    toDos.push(toDoObj);
    //꼭 toDos안에 집어넣은 이후에 불러야함.
    saveToDos();
}
결과

근데 보니까 [object Object] 로 되어있네? 이런걸 원했던 게 아닌데!
이유) local stroage에는 자바스크립트의 data를 저장할 수 없어 오직 string만 저장 가능.
자바스크립트는 local storage에 있는 모든 데이터를 string으로 저장하려고 함.
=> 그래서 우리는 object가 string이 되도록 만들어야해.
function saveToDos(){
    localStorage.setItem(TODOS_LS, JSON.stringify(toDos));
}
JSON.stringify는 자바스크립트 object를 string으로 바꿔줌
결과

toDos를 불러오는 작업
function loadToDos(){
    const loadedToDos = localStorage.getItem(TODOS_LS);
    if(loadedToDos !== null){
        console.log(loadedToDos);
    }
}
결과
콘솔창에 이렇게 뜸.
[{"text":"asdf","id":1},{"text":"asdf","id":2}]
문제는 불러온게 string이라는거야.
tip) JSON은 object -> string, string -> object 둘 다 변환 가능
function loadToDos(){
    const loadedToDos = localStorage.getItem(TODOS_LS);
    if(loadedToDos !== null){
        console.log(loadedToDos);
        const parsedToDos = JSON.parse(loadedToDos);
        console.log(parsedToDos);
    }
}
결과

모든 todo항목들에 대해서, 즉 parsedToDos 안에 있는 것들에 대해서 printToDo function실행
forEach는 기본적으로 함수를 실행하는데 array에 담겨있는 것들 각각에 한번씩 함수를 실행시켜 주는거임
function loadToDos(){
    const loadedToDos = localStorage.getItem(TODOS_LS);
    if(loadedToDos !== null){
        const parsedToDos = JSON.parse(loadedToDos);
        parsedToDos.forEach(function(toDo) {
            console.log(toDo.text);
        })
    }
}
결과

할일 저장하면 저렇게 콘솔에 뜸.
창 나가기 하고나서 다시 틀면 전에 입력했던 값이 저장되어 있어서 전에 입력했던 할일 값이 콘솔에 뜸.
function은 따로 떼서 밖에다가 둘 수도 있음
function something(toDo) {
    console.log(toDo.text);
}
function loadToDos(){
    const loadedToDos = localStorage.getItem(TODOS_LS);
    if(loadedToDos !== null){
        const parsedToDos = JSON.parse(loadedToDos);
        parsedToDos.forEach(something);
    }
}
이렇게^^ㅎㅎ
toDos에 있는 각각에 대해서 function실행 
결과는 아까랑 똑같아.
하지만 니꼬쌤과 나는 후자 방법보단 전자 방법으로 할거얌
function loadToDos(){
    const loadedToDos = localStorage.getItem(TODOS_LS);
    if(loadedToDos !== null){
        const parsedToDos = JSON.parse(loadedToDos);
        parsedToDos.forEach(function(toDo) {
            paintToDo(toDo.text);
        })
    }
}
결과

wow 이제 새로고침해도 todolist가 안사라지는 모습
Author And Source
이 문제에 관하여(자바스크립트 3.4~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@123cjstj/자바스크립트-3.4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)