console.log(document.body);
console.warn(document.body);
console.error(document.body);
console.dir(document.body);
console.count(); // default: 1
console.count("a"); // a: 1
console.count("a"); // a: 2
console.count("b"); // b: 1
console.count("a"); // a: 3
console.log("Reset a!"); // Reset a!
console.countReset("a");
console.count("a"); // a: 1
console.count("b"); // b: 2
console.time("반복문");
for (let i = 0; i < 10000; i++) {
console.log(i);
}
console.timeEnd("반복문"); // 반복문: 139.3740234375 ms
function a() {
function b() {
function c() {
console.log("Log !");
console.trace("Trace !");
}
c();
}
b();
}
a();
console.log(1);
console.log(2);
console.log(3);
console.clear();
const a = "The brown fox";
const b = 3;
const c = {
f: "fox",
d: "dog",
};
console.log("%s jump over the lazy dog %s times.", a, b);
console.log("%o is Object!", c);
console.log(
"%cThe brown fox %cjumped over %cthe laydog",
"color: brown; font-family: serif; font-size: 20px;",
"",
"font-size: 18px; color: #FFF; background-color: green; border-radius: 4px;"
);
document.cookie = `a=3; max-age=${60 * 60 * 24 * 3}`;
document.cookie = `b=2; expires=${new Date(2023, 11, 16)}`;
console.log(document.cookie); // b=2; a=3
function getCookie(name) {
const cookie = document.cookie
.split("; ")
.find((cookie) => cookie.split("=")[0] === name);
return cookie ? cookie.split("=")[1] : null;
}
console.log(getCookie("a")); // 3
getItem()
: 데이터 조회setItem()
: 데이터 추가removeItem()
: 데이터 제거clear()
: 스토리지 초기화localStorage.setItem("a", "Hello world!");
localStorage.setItem("b", JSON.stringify({ x: 1, y: 2 }));
localStorage.setItem("c", JSON.stringify(123));
console.log(localStorage.getItem("a"));
console.log(JSON.parse(localStorage.getItem("b")));
console.log(JSON.parse(localStorage.getItem("c")));
localStorage.removeItem("a");
localStorage.clear();
.href
: 전체 URL 주소.protocol
: 프로토콜.hostname
: 도메인 이름.pathname
: 도메인 이후 경로.host
: 포트 번호를 포함한 도메인 이름.port
: 포트 번호.hash
: 해시 정보(페이지의 ID).assign(주소)
: 해당 '주소'로 페이지 이동.replace(주소)
: 해당 '주소'로 페이지 이동, 현재 페이지 히스토리를 제거.reload(강력)
: 페이지 새로고침, true
인수는 '강력' 새로고침.length
: 등록된 히스토리 개수.scrollRestoration
: 히스토리 탐색시 스크롤 위치 복원 여부 확인 및 지정.state
: 현재 히스토리에 등록된 데이터(상태).back()
: 뒤로가기.forward()
: 앞으로 가기.go(위치)
: 현재 페이지 기준 특정 히스토리 '위치'로 이동.pushState(상태, 제목, 주소)
: 히스토리에 상태 및 주소를 추가.replaceState(상태, 제목, 주소)
: 현재 히스토리의 상태 및 주소를 교체기본 HTML
<style>
body {
margin: 0;
}
nav {
background-color: white;
padding: 10px;
border: 4px solid;
position: fixed;
bottom: 0;
right: 0;
}
nav input {
width: 50px;
}
section {
height: 100vh;
border: 10px solid;
box-sizing: border-box;
}
section.page1 {
color: red;
}
section.page2 {
color: orange;
}
section.page3 {
color: green;
}
</style>
<body>
<nav>
<a href="#/page1">p1</a>
<a href="#/page2">p2</a>
<a href="#/page3">p3</a>
<input type="text" />
</nav>
<div id="app">
<section id="/page1" class="page1">
<h1>Page 1</h1>
</section>
<section id="/page2" class="page2">
<h1>Page 2</h1>
</section>
<section id="/page3" class="page3">
<h1>Page 3</h1>
</section>
</div>
</body>
JavaScrip코드
Single Page Application
, 줄여서 SPA
라고 합니다.const page1 = /* html */ `
<section class="page1">
<h1>Page 1</h1>
</section>`;
const page2 = /* html */ `
<section class="page2">
<h1>Page 2</h1>
</section>`;
const page3 = /* html */ `
<section class="page3">
<h1>Page 3</h1>
</section>`;
const pageNotFound = /* html */ `
<section>
<h1>404 Page Not Found!</h1>
</section>`;
const pages = [
{ path: "#/page1", template: page1 },
{ path: "#/page2", template: page2 },
{ path: "#/page3", template: page3 },
];
const appEl = document.querySelector("#app");
const render = () => {
const page = pages.find((page) => page.path === location.hash);
appEl.innerHTML = page ? page.template : pageNotFound;
};
// popstate : 사용자가 브라우저의 페이지에서 히스토리를 남기는 동작을 할 때 발생하는 이벤트
window.addEventListener("popstate", render);
render(); // 최초 동작
const pagePush = (num) => {
history.pushState(`전달할 데이터 - ${num}`, null, `#/page${num}`);
render();
};
const inputEl = document.querySelector("nav input");
inputEl.addEventListener("keydown", (event) => {
if (event.key === "Enter") {
pagePush(event.target.value);
}
});