
▶️ 기본 자료형과 객체 자료형의 차이
다른 변수에 값을 할당하거나 함수 인자를 넘길 때 값을 복사해서 전달
값 자체를 전달한 것이기 때문에 아래에서 num과 num2는 각각 다른 공간이다. 값을 각 공간에 그대로 복사해서 사용한 것이다.
let num =5;
let num2 =num;
num2 +=5;
console.log(num, num2) //5 10 출력.
값을 복사해서 전달하는 것이 아니라, 메모리 주소의 참조값(address)을 저장
같은 객체를 참조를 하는거지 그대로 가져오는게 아니다! 같은 주소를 공유하게 된다고 생각.
let arr = [1,2,3,4,5];
let arr2 = arr;
arr2.reverse()
console.log(arr,arr2)// 둘 다 [5, 4, 3, 2, 1] 출력.
//arr2에만 reverse()를 했는데 arr도 reverse가 되었다.
//단순히 값 자체를 주는 것이 아니라 주소값을 전달하기 때문! 같은 집주소를 공유한다고 생각하자.
//결국 근본이 같기 때문에 같은 공간을 사용하게 되고 arr2, arr 둘 다 reverse된다.
Document는 웹 페이지에 존재하는 HTML요소에 접근하여 행동을 하고자 할 때 사용하는 객체이다.
필요한 요소를 가져와서 쓰겠다고 생각하자.
Document의 속성 - 선택된 요소의 정보를 보여준다.
document.documentElement , document.head , document.title , document.body , document.URL , document.domain
console.log(document.head)

이렇게 <head>에 대한 정보를 출력해준다.
Document에서의 요소 선택 - Elements에서 ‘s’주의!
let elById = document.getElementById("box")
console.log(elById)
//ID가 box인 요소의 정보를 보여준다.
//ID는 기본적으로 하나의 값이 와야한다. 그래서 Element에 's'가 없다.let elByClass = document.getElementsByClassName("box")
console.log(elByClass[0])
//이렇게 요소를 입력해주면 그에 맞는 내용을 출력해준다.let elByTag = document.getElementsByTagName("span")
console.log(elByTag)
//Elements 이기 때문에 기본적으로 여러개 보여준다.
//원하는 값만 하려면 인덱스요소를 입력. 💡 <script>의 위치는 중요하다! 기본적으로 위에서 아래로 읽힌다. 이런 내용들을 불러오려면 해당 요소들이 작성 된 후에 입력해야 출력이 가능하다. 그래서 <body>태그의 마지막 부분에 작성하는 것이 적절하다.
let elBySelector = document.querySelector(".box") 의 형태.let elBySelectorAll = document.querySelectorAll(".box") 의 형태.해당 ID를 가지는 요소를 불러오는 메소드이다.
const newId = document.getElementById("input")
//newId라는 이름의 변수를 선언, id가 "input"인 요소를 데리고 와서 쓰겠다는 의미.
▶️ .textContent, .innerText, .innerHTML
.textContent :선택돈 요소의 내부에 들어갈 문자열을 지정해준다.<div id="box2">
<b>hello</b> box2
</div>
<script>
let elBox2 = document.getElementById("box2")
console.log(elBox2.textContent="추가!")
</script>
// 원래 elBox2는 "hello box2"가 출력된다.
//.textContent로 "추가!"라는 문자열이 들어가도록 만들었다.
//결국 웹화면에는 "추가!" 문자만 보여진다.
.innerText : 요소 안의 text를 가져온다. 태그를 작성해도 text로 받아들인다..innerHTML : HTML태그를 인식해서 text와 태그를 함께 가져온다.element.innerText = "<div style='color:red'>A</div>"
//<div style='color:red'>A</div> 출력.
element.innerHTML = "<div style='color:red'>A</div>"
//글자색이 빨간색인 A 출력.
▶️ classList
요소.classList.add( ) : 지정한 값을 class의 목록에 추가.요소.classList.remove( ) : 지정한 값을 class의 목록에서 삭제.요소.classList.contains( ) : class의 목록에 특정한 class가 포함되어 있는지 확인.요소.classList.toggle( ) : class값을 토글링한다.▶️ className과 classList
newBox.classList.add("box")
newBox.classList.add("red")
//위에 두줄과 하래 한 줄은 같다.
//버튼을 클릭했을 때 "class명이 box red"인 빨간색네모를 화면에 추가하고 싶다면 이런식으로 작성.
newBox.className="box red"
▶️ setAttribute (html 요소 속성 추가)
요소.setAttribute(”속성명”, “지정할 속성”) 의 형태이다.▶️ 노드 접근
container.children 을 하게 되면 아래 이미지럼 출력된다.<div class="container">
<div class="box red"></div>
<div class="box orange"></div>
<div class="box yellow"></div>
</div>const container = document.querySelector(".container");
console.log(container.children)//아래 이미지처럼 전체 배열 반환
console.log(container.children[1])//인덱스 1번인 "box orange"내용이 출력.
요소.parenetNode : 특정 노드를 선택 후 부모 요소에 접근한다.요소.previousElementSibilings : 다음 형제 요소 하나가 온다.요소.nextElementSibilings : 이전 형제 요소 하나가 온다.▶️ createElenent(’html 요소’)
function addBox(){
const container2 = document.querySelector(".container")
const newBox = document.createElement("div")
newBox.classList.add("box")
newBox.classList.add("red")
container2.append(newBox);
}
//html에서 만든 "box 추가"버튼을 누르면 실행 될 함수를 생성한다.
//어떤 부분을 사용할건지를 선택해주어야한다. 어디에 추가할건지?
//html에서 쓰인 class="container"와 div요소를 가져와서 사용해준다. 각각 const로 선언!
//뭘 추가할건지? 어떤 요소를 새로 추가할건지?
//classList로 요소의 목록에 접근해서 add해준다. 뭐를? class="box"를.
//어디에 추가할건지?
//.container에 마지막 자식요소(append)로 추가하겠다.
요소.append( ), 요소.appenChild( ) : 선택된 요소의 맨 뒤의 자식 요소로 추가.
요소.prepend( ) : 선택된 요소의 맨 앞쪽인 자식 요소로 추가.
요소.before( ) : 선택된 요소의 앞에 있는 형제 요소로 추가.
요소.after( ) : 선택된 요소의 바로 뒤인 형제 요소로 추가.
createElenent(’html 요소’)에서와 같은 코드일 때 추가되는 위치를 비교해보자.
container2.append(newBox);
container2.prepend(newBox);
container2.before(newBox);
container2.after(newBox);

요소.remove( ) : 선택된 요소 삭제.요소.removeChild(’요소의 자식요소’) : 선택된 요소의 자식 요소가 삭제.▶️ append와 appendChild 모두 부모 노드에 자식 노드를 추가하는 메소드이다. 차이는?
const div = document.createElement('div');
div.append('hi')
// 결과 : <div>hi</div>const div = document.createElement('div')
const p = document.createElement('p')
document.body.append(div, p, 'hello')
//결과 : <div></div> <p></p> hellocreateTextNode를 생성 후 삽입 해주어야한다.const divElem = document.createElement('div')
const pElem = document.createElemment('p')
divElem.appendChild(pElem)'
// 결과 : <div><p></p></div>▶️ remove와 removeChild 모두 요소를 삭제해주는 메소드이다. 차이는?
💬