
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 : globalNaN : 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의 개념도 다시 학습 필요!