2022.01.25 - 2022.01.29
몰랐던 것 위주로 정리
- javascript(기초)
- javascript(심화)
문서 객체 모델
이라고도 하며 객체 지향 모델로써 구조화된 문서를 표현하는 형식HTML
, XML
의 프로그래밍 인터페이스DOM
을 이용하여 프로그래밍 언어가 문서의 스타일 등을 변경할 수 있음HTML
요소에 접근할 때는 반드시 Document 객체를 이용HTML
요소 선택/생성, 이벤트 핸들러 추가, 객체 선택시 사용
HTML
요소 선택
-document.getElementById()
: 해당 id의 요소를 선택
-document.getElementsByClassName()
: 해당 클래스의 요소들을 선택
-document.getElementsByName()
: 해당 name값을 가지는 요소들을 선택
-document.querySelector()
: 해당 선택자를 가지는 요소를 하나 선택
-document.querySelectorAll()
: 해당 선택자를 가지는 요소를 전체 선택
HTML
요소 생성
-document.createElement()
: 지정된 html 요소 생성
-document.write()
: html 출력 스트림을 통해 텍스트 출력
-document.선택 메서드.innerHTML
: 선택 메서드로 얻어온 태그 밑에 추가(createElement보다 간편함)
이벤트 핸들러 추가
-요소.onclick = function(){}
-요소.addEventListener(이벤트속성, 실행함수)
HTML DOM
에서 정보를 저장하는 계층적 단위HTML
문서 전체를 나타내는 노드요소.nodeName
과 같이 사용 가능nodeName
: 노드 이름 반환nodeValue
: 노드 값 반환nodeType
: 숫자값 반환, 요소 노드(1), 속성 노드(2), 텍스트 노드(3), 주석 노드(8), 문서 노드(9)✔ 어려움 주의
javascript
→ 인터프리터 언어(but 컴파일 언어의 특징도 가지고 있음)
-인터프리터 언어 : 코드를 한 줄씩 읽고 실행
-컴파일 언어 : 전체 코드를 읽고 실행
javascript
- 싱글 스레드 환경에서 비동기 동작 처리
실행 시 코드가 없어도 this
/variable object
/scope chain
을 초기화
-scope
: 코드가 현재 실행되는 환경, 맥락을 의미
-this
: 레퍼런스 변수( window(global_scope 환경에서), object(객체에 속한 메서드 실행시) 를 의미)
-this
/variable object
/scope chain
세 개를 통틀어 실행 환경(execution context) 라고 함
콜스택 : 실행 환경이 쌓이면서 생기는 부분
this
등에 대한 레퍼런스가 존재this
가 함수의 호출 환경에 따라 동적으로 세팅되는 것
함수 호출 환경
1.함수 호출 - 함수 직접 호출
2.메서드 호출 - 객체의 메서드 호출
3.생성자 호출 - 생성자 함수를 호출
4.간접 호출 - call
, apply
등으로 함수를 직접 호출
5.그 외 - 콜백함수(특정 동작 이후 불려지는 함수/ 다른 함수의 인자로 보내지는 함수) 호출
bind
/ apply
/ call
등으로 this
가 가리키는 것을 조작 가능
✅ 화살표 함수를 사용하는 경우 this
는 함수가 생성된 환경을 가리키도록 고정
(this
= 호출된 함수를 둘러싼 실행 컨텍스트)
✅ 일반 함수를 사용하는 경우 this
는 함수가 호출된 환경을 가리키며 동적으로 변경 가능
(this
= 새롭게 생성된 실행 컨텍스트)
javascript
에서는 함수도 일급 객체✅ 함수의 일급 객체 성질
// Rest Operator 예제
function Rest(arg, ...rest){
console.log("arg:", arg);
console.log("rest:", rest);
}
Rest(1, 2, 3, 4);
// arg: 1
// rest: (3) [2, 3, 4]
function sumArray(sum, arr) {
if (arr.length === 0) return sum;
const [head, ...tail] = arr;
return sumArray(sum + head, tail);
}
sumArray(0, [1, 2, 3, 4, 5]);
// 15
// Spread Operator 예제
function Spread(x, y, z){
console.log(x);
console.log(y);
console.log(z);
}
Spread(...[1, 2, 3]);
// 1
// 2
// 3
let o = {
name: "Daniel",
age: 23,
address: "Street",
job: "Software Engineer",
}
let o2 = { ...o, name: "Tom", age: 24 }
let o3 = { name: "Tom", age: 24, ...o }
o2.name // Tom
o2.job // Software Engineer
o3.name // Daniel
chrome
브라우저의 경우 v8
엔진(made by google) 사용node.js
: 브라우저 외의 환경에서 자바스크립트 코드를 실행하도록 하는 프로그램node.js
는 여러 프로그램으로 구성되며 v8
사용node.js
의 실행 결과가 다를 수 있음함수의 렉시컬 환경 → 함수가 사용하는 변수들을 둘러싼 환경
특정 변수의 값은 함수의 렉시컬 환경 안에서 찾을 수 있음
실행 컨텍스트 안에 정의된 variable object
로 이해할 수 있음
생성단계 → 함수 선언문 / 표현식/ 변수 등을 실행 컨텍스트에 저장
- 변수의 경우 실행 컨텍스트의 렉시컬 환경 구성
- 함수 선언문 외에 변수는 값이 저장되지 않음
실행단계 → 변수에 값을 할당하는 구문을 만나면 실행 컨텍스트에 값을 저장 → 한 줄씩 읽어나가며 실행
✔ 생성 단계에서
var
→ undefined
로 초기화
let
, const
→ 초기화되지 않음 → hoisting
발생하지 않음
✔ 선언 타입별 특징
var
, let
→ 변수에 재할당 가능
const
→ 재할당 불가능
var
→ 함수 스코프
let
, const
→ 블록 스코프
window
/ node : global
NaN
: Not a NumberisNaN()
: 전역함수, 입력값을 숫자로 변환했을 때 NaN 이 되는지 검사BigInt
타입과 호환 x, Number
타입만을 인자로 다룬다Date.getDay()
→ 요일을 0(일) - 6(토) 로 구한다 (연월일시분초밀리초 다 가능)setDate()
→ 시간 설정toDateString()
→ 특정 포맷의 문자열 반환getTime()
→ 1970.1.1 시점부터 흐른 시간을 밀리초 단위로 반환Date.now()
→ 현재 시간의 밀리초(실시간)a = new Date();
→ 생성 시점의 시간 정보includes()
→ 문자열 검색에 성공시 true, 실패시 false 반환toUpperCase()
→ 대문자 변환replace()
→ 문자열 검색해서 타겟 문자열로 변환split()
→ 특정 문자열 기준으로 분리, 없을 시 글자별로 분리indexOf()
→ 특정 문자열을 검색하여 인덱스 리턴, 없을 시 -1JSON.stringify()
→ 객체를 json문자열로JSON.parse()
→ json문자열을 객체로✅ 정리
✏ closure
, Lexical environment
등 javascript
의 전반적인 실행 환경 개념에 대해 이해를 완벽하게 하지 못함
✏ bind
의 개념도 다시 학습 필요!