일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AWS
- 웹팩
- Recoil
- CDN
- graphql
- Modal
- 웹크롤링
- 성능최적화
- javascript animation
- typescript
- styled-component
- socket.io
- go
- sequelize
- react
- 정규표현식
- 회고
- 반응형웹
- express
- scrapping
- docker
- cicd
- npx
- route
- 포트포워딩
- Redux
- component
- Today
- Total
프로그래밍 공부하기
Attribute vs Property 본문
1. 정의
Attribute: HTML 요소의 추가적인 정보. HTML에서 정의된다.
ex. <div class="root"/>
Property: DOM Tree 내의 Attribute. DOM에서 정의된다.
ex. const $div = document.querySelector(".root");
console.log(div.className); // root
웹페이지 개발을 하다보면 Attribute와 Property라는 단어를 접하게 된다. 두 단어는 어떤 차이가 있을까? 먼저 Attribute는 HTML 요소의 추가적인 정보를 정의하기 위한 것으로 HTML에서 정의된다. 반면 Property는 DOM Tree 내에서의 Attribute를 가리키므로 DOM 내에서 정의된다.
*DOM: HTML 페이지를 객체로 구조화한 것. 프로그래밍 언어에서 HTML 페이지를 조작할 수 있도록 연결하는 역할
2. 이름과 값
See the Pen Btn Disabled by ImHyeLim1209 (@imhyelim1209) on CodePen.
Attribute와 Property는 각 이름과 값이 1:1 매핑되기도 하고 그렇지 않기도 하다. 예를 들어 id는 Attribute와 Property 둘 다 존재하지만, class는 Attribute에만 존재하며, Property는 className이 Attribute의 class와 같은 값을 갖는다. 비슷하게 textContent는 Property에만 존재하며 Attribute로는 존재하지 않는다.
이름이 같더라도 값이 다른 경우도 있다. 예를 들어 위 코드펜에서 disabled attribute가 그러하다. disabled라는 Attribute는 HTML 요소에 존재하면 그 값과는 상관 없이 해당 요소를 비활성화시킨다. DOM에서 각 버튼의 disable라는 Property를 확인해보면 비활성화된 버튼은 값이 true, 그렇지 않으면 false를 갖는다.
3. 변경 가능성
See the Pen property_attribute by ImHyeLim1209 (@imhyelim1209) on CodePen.
DOM 요소의 Property는 HTML 요소의 Attribute를 기반으로 초기화되며, Attribute는 더 이상 변경되지 않는다. 즉, Property는 JS 코드에 의해 추후 값이 변경될 수 있지만 Attribute는 그렇지 않다. 위 코드펜의 input 박스의 텍스트를 변경하고 change 버튼을 눌러보자. 그 결과 div1은 변경된 텍스트가 출력되지만 div2는 그렇지 않다. div2는 getAttribute 메소드로 Attribute를 가져왔기 때문에 value가 변경되지 않은 것이다.
'Web > [JS] FrontEnd' 카테고리의 다른 글
브라우저 작동원리2 - 페이지 이동 (0) | 2021.10.19 |
---|---|
브라우저 작동 원리1 - 브라우저 구조 (0) | 2021.10.15 |
lang Tag (0) | 2021.07.30 |
Intersection Observer (0) | 2021.07.16 |
Props Drilling (0) | 2021.06.14 |