HTML : 구조/의미 담당
CSS : 문서의 표현
JS와 같이 등장
점차 발전하여 HTML 문서를 직접 수정까지도 가능
- 문서노드 : 최상위
- 요소노드 : 태그를 표현
- 속성노드 : 자식노드가 아닌 태그에 옆에 붙어있음
- 텍스트노드
- getElementById : 먼저찾은 요소 하나 반환
- getElementByClassName : 일치하는 모든 요소 반환
- getElementByTagName : 일치하는 모든 요소 반환
- querySelector : 먼저 찾은 요소 하나 반환
- querySelectorAll : 일치하는 모든 요소 반환
- parentNode : 선택한 대상의 부모노드
- firstElementNode : 선택한 대상의 첫번째 자식 노드
- children : 선택한 대상의 모든 자식 노드
- nextElementSibiling : 선택한 대상의 다음 형제 요소 노드
- previousElementSibiling : 선택한 대상의 이전 형제 요소 노드
- className : 클래스 속성 값
- classList : 클래스 관련 리스트
- hasAttribute : 해당 속성이 있다면 속성값을 리턴하고 아니면 null 리턴
- getAttribute : 해당하는 속성에 따르는 값을 가져온다.
- setAttribute : 속성과 값을 설정
- removeAttribute : 속성 제거
<h1 class='a'>abc</h1>
<script>
const h1 = document.querySelector('.a')
console.log(h1.className)
console.log(h1.classList)
console.log(h1.getAttribute('class'))
console.log(h1);
setTimeout(()=>{
h1.setAttribute('id','abc');
h1.removeAttribute('class')
console.log(h1);
},1000)
</script>
setTimeout
을 사용하여 결과를 확인 했다.
- textContent
- innerHTML => XSS 위험
- createElement
- appendChild
- removeChild
기존의 Dom이 매번 많은 변화를 통해 성능에서 문제가 생기는 것을 해결 하기 위해 생긴 개념
1) 반복문을 돌려 Dom을 업데이트
2) 반복문을 돌려 string을 업데이트 하다 마지막에 Dom을 업데이트
메모리 상에서 조작 후 라이브 Dom트리에 추가
ex) createDocumentFragement 메소드 사용
<ul id="ul">
</ul>
<script>
var element = document.getElementById('ul'); // ul이 존재한다고 가정
var fragment = document.createDocumentFragment();
var browsers = ['Firefox', 'Chrome', 'Opera',
'Safari', 'Internet Explorer'];
browsers.forEach(function(browser) {
var li = document.createElement('li');
li.textContent = browser;
fragment.appendChild(li);
});
element.appendChild(fragment);
</script>
- 평가 : 코드가 계산되어 값을 만드는 것
- 일급 : 값으로 다루며 변수에 담고 함수의 인자 및 결과로 사용가능
- 일급 함수 : 함수를 값으로 다룰 수 있다.
ex)const a = ()=>{}
- 함수를 인자로 받아서 실행하는 함수
- 함수를 만들어 리턴하는 함수
const apply1 = f => f(1);
console.log(apply1(a=>a-1)); //0
const set = [1,2,3].map(x=>x*x) //[1,4,9]
map또한 함수를 인자로 받으므로 고차함수이다.
const calculate = (a) => (b) => (c) =>(a+b+c)
calculate(1) //(b) => (c) =>(a+b+c)
calculate(1)(2) //(c) =>(a+b+c)
calculate(1)(2)(3) //6
- for in 반복문 : 객체의 모든 열거 가능한 속성에 대해 반복
- for of 반복문 :
Symbol.iterator
속성을 가지는 컬렉션 전용
- iterable : 이터레이터를 리턴하는
[Symbol.iterator]()
를 가진 값- iterator : { value, done } 객체를 리턴하는 next()를 가진 값
- iterable protocol : 이터러블과 관련 동작하도록 한 규약
- Array
- new Set
- new Map
- ==보단 ===사용을
- 빈배열은 Boolean으로 true이다.
- forEach는 return이 없을때 map은 return이 있을때 사용
- forEach에서 사용법
[[10,900,80]].forEach(val=>{console.log(val[1],val[2])})
900, 80을 출력하기 위해 이것보단
[[10,900,80]].forEach(([_,h,p])=>{console.log(h,p)})
이게 더 보기 좋다.
not iterable
오류가 났었는데 arr[Symbol.iterator]();
이렇게 적용되어 next
메소드로 처리를 할 수 없는 형태이기 때문에 객체는 for of 가 안됐구나 느꼈다.