[JavaScript] JS 내장 객체, 브라우저 객체, JS 삽입위치
업데이트:
✅ 자바스크립트 내장 객체
📌 Array 객체
자바스크립트에는 배열을 쉽게 만들고 다룰수 있는 Array 객체가 내장되어 있다. 객체를 만들기 위해서는 인스턴스가 필요하기 때문에 new 예약어와 함께 사용하면 된다.
// 초기값을 지정하지 않는 경우
var numbers = new Array(); // 배열의 크기를 지정하지 않음
var numbers = new Array(4); // 배열의 크기를 지정함
// 초기값이 있는 경우
var numbers = ["one", "two", "three", "four"]; // 배열선언
var numbers = Array("one","two","three","four"); // Array객체 사용 배열 선언
📌 Array 객체의 메서드
Array 객체는 여러가지 메서드가 있다. 간단하게 표로 정리해보자.
종류 | 설명 |
---|---|
concat | 기존 배열에 요소를 추가해 새로운 배열을 만듭니다 |
every | 배열의 모든 요소가 주어진 함수에 대해 참이면 true, 그렇지 않으면 false를 반환한다 |
filter | 배열 요소 중에서 주어진 필터링 함수에 대해 true인 요소만 골라 새로운 배열을 만든다 |
forEach | 배열의 모든 요소에 대해 주어진 함수를 실행한다 |
indexOf | 주어진 값과 일치하는 값이 있는 배열 요소의 첫 인덱스를 찾는다 |
join | 배열 요소를 문자열로 합친다. 이때 구분자를 지정할 수 있다 |
push | 배열의 맨 끝에 새로운 요소를 추가한 후 새로운 length를 반환한다 |
unshift | 배열의 시작 부분에 새로운 요소를 추가한다 |
pop | 배열의 마지막 요소를 꺼내 그 값을 결과로 반환한다 |
shift | 배열의 첫번째 요소를 꺼내 그 값을 결과로 반환한다 |
splice | 배열의 요소를 추가하거나 삭제한다 |
slice | 배열에서 특정한 부분만 잘라낸다 |
reverse | 배열의 배치 순서를 역순으로 바꾼다 |
sort | 배열 요소를 지정한 조건에 따라 정렬한다 |
toString | 배열에서 지정한 부분을 문자열로 반환한다. 이때 각 요소는 쉼표(,)로 구분한다 |
📌 JS의 삽입 위치
JS코드는 <header>
에 포함될 수도 있고, <body>
에 포함될 수도 있다. 그러나 대부분의 경우 JS코드는 <body>
내부에 포함시켜 작성된다. <header>
에 위치하는 것과 <body>
에 위치하는게 어떤 차이가 있고 왜 <body>
에 대부분 작성하는지 알아보자.
브라우저는 HTML의 구조와 CSS 스타일을 렌더링하는 도중 자바 스크립트를 만나게 되면 이에 대한 해석과 구현이 완료될때까지 브라우저 렌더링을 중단한다. 이후 포스팅을 이해하기 위해서는 브라우저 렌더링이 어떤 것이고, 어떤 과정을 거치는지 알 필요가 있기 때문에 브라우저 렌더링 과정 포스팅을 참고하길 바란다.
한마디로, 자바스크립트의 삽입 위치가 브라우저 렌더링에 영향을 미친다는 것이다.
<header>
(..생략..)
<script>
document.querySelector("#aa").onclick = function(){
alert("aa 선택됨");
}
</script>
(...생략...)
</header>
<body>
(...생략...)
</body>
위의 코드는 aa
라는 아이디를 가진 요소를 클릭했을 때 “aa 선택됨” 이라는 경고창을 띄워주는 코드이다. 그러나 위 코드는 정상적으로 작동하지 못한다. <script>
코드가 <body>
코드보다 앞서 존재하기 때문에 아직 브라우저 렌더링이 시작되지 않았고, 이로인해 document
객체가 HTML요소를 가지고 있지 않기 때문에 #aa
라는 아이디를 가진 요소를 찾을 수가 없다.
이런 코드를 실행시키면 alert창이 안뜨게 된다. 왜냐하면 document라는 객체는 HTML 문서의 정보를 가지는 객체인데, HTML요소는 body에 선언되어 있고 , header는 body보다 위쪽에 선언되어 있기때문에 document에는 아직 아무런 요소가 들어있지 않다. 즉, document가 aa
라는 요소를 찾지 못하기때문에 발생하는 오류이다.
그렇다고 <header>
부분에 <script>
코드를 절대 작성하지 못하는 것은 아니다. 언제나 그렇듯 방법은 존재하기 마련이다..
JS의 최상단 객체인 window
객체의 onload
메서드를 사용하면 된다. window
객체는 브라우저 창이 열릴 때 마다 생성되는 객체이고 JS의 모든 객체의 부모노드라고 볼 수 있다.
onload
메서드는 페이지의 모든 요소들이 로드되면 실행되는 전역 콜백 함수이다. 한 페이지에서 하나의 window.onload()
함수만 적용되는 특징이 있다. 때문에 자바스크립트 코드에 window.onload
를 붙여주면 모든 요소가 로드 된 후에 자바스크립트 코드를 실행하기 때문에 정상적으로 사용 가능하다. 아래는 예시 코드이다.
<header>
<script>
window.onload = function(){
document.querySelector("#aa").onclick = function(){
alert("aa 선택됨");
}
<script>
<header>
✅ 브라우저 관련 객체
웹 브라우저가 화면에 나타나는 순간 브라우저는 관련 객체를 만들어 낸다. 가장 먼저 window라는 최상단 객체가 만들어지고 그 밑으로 하위요소에 해당하는 객체들이 생성된다. 이는 계층구조로 나타낼 수 있고 아래 이미지 처럼 구성된다.
관련 객체들을 간단하게 표로 정리해보겠다.
종류 | 설명 |
---|---|
window | 브라우저 창이 열릴 때마다 하나씩 만들어진다. 브라우저 창 안의 요소 중 최상단에 위치한다 |
document | 웹 문서마다 하나씩 있으며 <body> 태그를 만나면 만들어진다. HTML 문서의 정보가 담겨있다 |
navigator | 현재 사용하는 브라우저의 정보가 들어있다 |
history | 현재 창에서 사용자의 방문 기록을 저장한다 |
location | 현재 페이지의 URL 정보가 담겨있다 |
screen | 현재 사용하는 화면 정보를 다룬다 |
이 외에도 정말 많은 객체, 프로퍼티, 메서드가 있지만 많이 사용하는 편은 아니고 굳이 다 외워둘 필요 없기때문에 작성하지 않겠다. 필요하다면 다른 블로그 게시물을 확인하면 되겠다.
댓글남기기