특정 코드 반복할 때
for(초기값; 조건문; 증감문) {
//조건이 true면 반복 실행할 코드
}
ex.
for(let i=0; i<10; i++) {
console.log(i, "안녕하세요")}
let i;
for(i = 0; i < 10; i++) {
//조건이 true면 반복 실행할 코드
}
보통 변수는 i, j, k 순으로 사용 && 0부터 시작
for문은 횟수가 정해진 반복문에 적절하다면, While문은 횟수가 정해지지 않은(ex. 사용자에게 특정 조건에 맞는 값 받기 전까지 계속 반복) 상황에 적절하다.
조건을 제어하는 구문이 기본적으로 존재하지 않아서 코드 작성 시 실수하면 무한루프에 빠질 수 있다.
while(조건) {
//조건이 true면 반복 실행할 코드
}
ex.
let j=0;
while(j < 10) {
console.log(`${j}번째`}
j++ //이게 없으면 j가 항상 0이므로 무한루프에 빠짐!
무조건 명령을 한 번 실행한 후에 조건에 따라 진행.
do {
// 명령문
} while(조건)
ex.
do {
let number = Number(prompt("양수를 입력하세요"));
} while(number < 0)
let array = ["a", "b", "c"]
for (let (배열의 원소를 담은 변수명) of (위에서 선언한 배열)) {
}
ex.
let fruits = ["apple", "banana", "peach"]
for(let fruit of fruits) {
console.log(fruit);
}
메서드와 함수를 비교하면 조금 더 개념 잡기가 쉽다.
let obj1 = {
func1: function () {
console.log("method");
}
}
obj1.func1();
// func1은 객체(Obj1)의 프로퍼티이다. 즉 객체를 통해 함수를 호출.
function func2 {
console.log("function");
}
func2();
window.func2();
/* 전역범위에서 함수를 호출하는 경우 'window'를 전역객체로 받지만,
이는 사용자가 설정한 객체가 아니기 때문에 메소드가 아니라 여전히 함수이다. */
ex.
let obj1 = {
func1: function () {
console.log("method");
}
}
obj1.func1(); // 점 표기법으로 메서드 호출
obj1["func1"](); // 대괄호 표기법으로 메서드 호출
let result1 = obj1.func1;
result1(); //function
cf. attribute vs 프러퍼티(property)
attribute는 HTML 문서에 정의되어있는 것으로 HTML 요소에 대한 추가 정보가 필요할 때에 특정 이름과 값을 부여한다. 정적인 속성이다.
반면 property는 HTML DOM(문서객체모델)에서의 속성이다. 자바스크립트 오브젝트의 정보들을 토대로 속성을 가져오기 때문에 값이 변화할 수 있다.
[].forEach
arr.filter()
arr.find()
arr.map()
arr.push()
arr.pop()
arr.shift()
arr.unshift()
arr.include()
arr.length()
arr.indexOf()
arr.reverse()
arr.join()
str.length
str.toUpperCase()
str.toLowerCase()
str.indexOf('')
str.slice(startIdx[,endIdx])
str.replace('string1', 'string2')
str.replaceAll('string1', 'string2')
str.repeat(n)
str.trim()
str.split('')
여러 메소드를 연결해서 사용하는 것.
단, 메소드가 반환값(return)을 가지고 있는 경우에만 사용 가능하다.
메소드가 반환값을 가진다는 게 어떤 의미일까?
메소드도 함수의 일종이므로 string.split("")를 함수로 바꾼다고 가정하면
function split() {
let arr;
//문자열 자르는 코드 작성
arr = ["", "", ""];
return arr;
}
split은 배열을 반환(return arr의 값)한다. 그래서 이 배열을 변수에 대입하여 쓸 수 있다.
cf. .push()
같은 메소드는 반환값이 없으므로 메소드 체이닝을 할 수 없다.
자바스크립트는 내장된 객체가 존재한다.
new Date()
date.get~~()
Math.min()
Math.max()
HTML 문서 내 모든 요소를 정의하고 각 요소에 접근하는 방법을 제공한다. 또한, HTML 문서의 내용과 구조를 객체 모델로 변환하여 다양한 프로그램에서 사용할 수 있다.
이 개념을 조금 더 깊이 이해하기 위해서는 브라우저가 웹 페이지 렌더링하는 과정을 살펴보는 게 도움이 된다. 여러 단계이지만 크게 두 가지로 나눌 수 있다.
렌더 트리는 웹페이지 표시할 HTML 요소, 이와 관련된 스타일 요소로 구성된다. 즉 HTML 문서의 객체 모델 DOM, 그리고 CSS의 구조화된 표현인 CSSDOM(Cascading Style Sheets Object Model)으로 이루어진다고 볼 수 있다.
DOM의 개체는 '노드* 트리 구조'이다. 하나의 뿌리 노드(HTML)를 기점으로 head와 body로 나누어져 각 요소 안의 컨텐츠가 나뭇가지처럼 뻗어나간다.
a
는 요소 노드, 'href'는 속성 노드이다.원본 문서인 HTML과 완전히 동일하진 않다.
1. body
와 head
가 누락된 파일이더라도 DOM에서는 해당 노드가 존재한다.
2. 앞서 언급한 대로 원본 내용은 바꾸지 않되 자바스크립트를 통해 새 노드를 추가하거나 기존의 것을 삭제할 수 있다. 다만 모든 변화의 과정에서 원본 HTML은 정적인 특성을 지녔기에 전혀 변화가 생기지 않는다. 동적 특성을 지닌 자바스크립트에서만 변한다.
3. 웹 브라우저에서 사용자가 볼 수 없게 설정한(ex. display: none;) 영역도 DOM에서는 모두 표시된다.
HTML 요소에 접근할 때 사용하는 객체
document.body()
HTML 문서의 body 영역에 접근
document.getElementById()
document.getElementsByClassName()
document.getElementsByTagName()
document.getElementsByName()
일치하는 element가 없다면 null 반환.
*
태그명
#아이디명
.클래스명
[속성=값]
태그/클래스/아이디[속성]
부모 선택할-자식
document.querySelector("요소 선택자")
//문서의 제일 첫번째 요소 반환
document.querySelectorAll("요소 선택자")
//해당하는 모든 요소를 가져와 배열 데이터로 만들어 준다.
<span id="greeting">Hello</span>
document.getElementById("greeting").innerText = "Hi";
document.getElementById("greeting").innerHtml
= "Hi nice to meet <b>you</b>"
DOM은 정확히 무엇일까?
Attribute와 Property의 차이점 + DOM
CSS Selector (CSS 선택자)
배운 개념들이 헷갈린다.. DOM에서 요소를 가져올 때 변수를 정의해놓고 변수를 왜 정의했는지 모르겠는 순간을 맞닥뜨렸다. DOM이랑 자바스크립트가 무슨 상관인지도 헷갈리고..
단어를 정확하게 알아야 이해할 때 덜 혼란스러울 것 같아서 자바스크립트 deep dive를 읽기 시작했다. 추석 연휴 때 열심히 읽고 정리해야겠다.