JavaScript Console 사용하기

07.10.20114 Min Read — In JavaScript
JavaScript icon

Chrome, Firefox 에서 JavaScript 개발을 하더라도 console 창에서 log(), dir() 만 사용했었다.
위 동영상을 보고 console 에서 또 다른 기능 들에 대해서 알게되어 활용 할 수 있다면 JavaScript 개발을 좀더 손쉽게 할 수 있지 않을까 하는 생각이 들었다.
그래서 정리를 하고 확실히 알아 두기 위해서 Posting 을 해볼까 한다.

위 동영상에서 소개 되고 있는 기능들은 목록은 다음과 같다.

  • XHR
  • console.time / timeEnd
  • console.dir() / dir()
  • $o / inspect()
  • $$
  • monitorEvents()
  • keys() / values()
  • copy()
  • super-cool Opera and Firebug
  • more devtools

위 동영상에서 사용되고 있는 소스는 다음과 같다.

<link href='http://fonts.googleapis.com/css?family=Merriweather|Droid+Sans+Mono&v1' rel='stylesheet' type='text/css'>

<h1>be a console power-user</h1>

<ul>
	<li>XHR
	<li>console.time() / timeEnd()
	<li>console.dir() / dir()
	<li>$0 / inspect()
	<li>$$
	<li>monitorEvents()
	<li>keys()/values()
	<li>copy()
	<li>super-cool Opera and Firebug features
	<li><a href="//code.google.com/chrome/devtools" rel="prerender">more devtools</a>
</ul>
body {
  font-family: Merriweather;
  font-size: 18px;
}

textarea {
  width: 100%;
  height: 80px;
  font-family: Droid Sans Mono;
}
function ajax() {
  var xhr = new XMLHttpRequest()
  xhr.open('get', '/?' + Math.random(), true)
  xhr.onload = function(evt) {
    txt = document.createElement('textarea')
    document.body.appendChild(txt)
    txt.value = evt.target.response
  }
  xhr.send(null)
}

addEventListener('click', ajax, false)

XHR

xhr

console 창에서 위와 같이 메뉴창을 열어서 Log XMLHttpRequests 를 선택해 두면 XMLHttpRequests 가 발생할때 마다 콘솔에 XHLHttpRequest 로그를 표시해준다.

Ajax 를 이용해서 개발을 할때 기존에는 Network 탭에서 확인하였지만 이렇게 직접 Console 에서 바로바로 Ajax 호출을 확인할 수 있어서 개발할때 좋을꺼 같다.

또 다른 사이트 분석을 할때도 어느 시점에 Ajax 를 사용하는지 쉽게 볼 수 있다.

console.time() / console.timeEnd()

function ajax() {
  console.time('ajax') //시작 지점
  var xhr = new XMLHttpRequest()
  xhr.open('get', '/?' + Math.random(), true)
  xhr.onload = function(evt) {
    txt = document.createElement('textarea')
    document.body.appendChild(txt)
    txt.value = evt.target.response
    console.timeEnd('ajax') // 끝나는 지
  }
  xhr.send(null)
}

addEventListener('click', ajax, false)

Javascript 소스만 위와 같이 변경을 한다.

실행을 해보면 다음과 같은 결과를 console 에서 확인 할 수 있다.

time, timeend

console.time console.timeEnd 는 결과와 같이 시작된 지점을 time() Method 와 끝나는 지점에 timeEnd() method 를 써주고 인자 값으로 검사하고자 하는 함수 이름을 넘겨주면 소스코드가 실행된 시간을 화면에 출력해 준다.

최근에 프로젝트를 진행하면서 for 문으로 하는것이 빠를지 jQuery 의 $.each 문으로 하는것이 빠른지 궁금했던적이 있다. 이런 경우 직접 눈으로 확인 할 수 있는 좋은 방법이라고 생각 한다.

console.dir() / dir()

function ajax() {
  var xhr = new XMLHttpRequest()
  xhr.open('get', '/?' + Math.random(), true)
  xhr.onload = function(evt) {
    txt = document.createElement('textarea')
    document.body.appendChild(txt)
    txt.value = evt.target.response
    console.log(txt) //log
    console.dir(txt) //dir
  }
  xhr.send(null)
}

addEventListener('click', ajax, false)

Javascript 소스만 위와 같이 변경을 한다.

실행을 해보면 다음과 같은 결과를 console 에서 확인 할 수 있다.

dir

위와 같이 log 는 단순하게 인자값으로 넘겨준것을 console 에 반환해서 찍어주고 dir 은 인자값으로 넘겨준 값을 자세하게 그 안에 어떤것들이 들어있는지 method, property 등 을 보여준다.

HTMLTextAreaElement 앞에 화살표를 눌러보면 아래로 펼쳐 지면서 목록을 쭉 볼수 있다. 나같은 경우는 dir 을 지정한 객체가 method 를 가지고 있는지 혹은 prototype 을 공부할때 prototype 을 만들어서 상속했을때 어떻게 상속이 되는지 이런것을 확인 할때 주로 사용 했었다.

동영상 예제에서 보면 dir()을 사용하는데 이건 소스에 그대로 사용해서 쓰면 오류가 발생한다. 다음과 같은 오류가 발생한다.

Uncaught ReferenceError: txt is not defined

$0 / inspect()

먼저 inspect() method 는 console 창에서 inspect() Method 를 호출하면 인자값으로 넘겨주 Element 를 Elements 탭에서 선택된 상태로 표시해준다. 페이지 에서 마우스 오른쪽 버튼을 누르고 "요소 검사" 검사를 통해서 선택하는거와 같은 기능이다.

$0 는 inspect() 를 통해서 선택된 기준으로 $0 는 현재 선택된 Element 를 나타내고 숫자가 증가하면 이전에 선택했던 Element 를 기억하고 있다가 차례대로 반환한다.

$$

동영상에 보면 bling bling function 이라고 부른다. 달러 표시를 그쪽에서는 그렇게 부르는듯 하다. console 창에서 $$ 를 입력해보면 다음과 같은 function 몸체를 볼수 있다. 대략 봤을때 인자 값을 받아서 querySelectorAll Method 를 통해서 Element 를 반환해주는 함수 인거 같다. $$

예제로 확인해 보자. $$ 함수에 textarea 를 찾아보면 다음과 같이 textarea 를 반환해 주는것을 확인 할 수 있다.

$$1

document 상에 있는 textarea 를 배열로 반환해 준다. 현재 페이지에 textarea 가 하나밖에 없어서 하나만 나온것이고 li element 를 확인해보면 배열로 여러개의 li element 를 반환해 주는것을 볼 수 있다.

monitorEvents()

monitorEvents 함수는 인자값으로 받은 Element 에서 발행하는 Event 를 모니터링 해주는 함수이다.

예제를 확인해 보자.

monitorEvents

위와 같이 monitorEvents() 함수에 인자값으로 $$ 함수를 사용해서 textarea 를 넘겨주면 textarea 위에서 발생하는 마우스 이벤트, 키보드 이벤트를 확인 할 수있다. console 에 나와 있는 화살표를 눌러서 자세하게 확인 할 수도 있다.

keys() / values()

keys() , values() 함수는 다음 예제와 같이 인자값으로 넘겨준 값이 가지고 있는 모든 key 값과, value 값을 console 창에 반환해서 보여주는 함수이다.

keys

values

copy()

동영상에서 보면 알겠지만 copy() 함수는 console 에 보여질 내용을 보기 힘들때 반환값을 copy 해서 다른 에디터라던지 등등 옴겨서 볼때 사용하는 함수이다.

예제를 확인해 보면 copy 함수를 통해서 keys 값을 복사 하는 것을 확인 할 수있다.

copy

super-cool Opera and Firebug

Opera 의 Dragonfly

FireFox 의 Firebug

이 두가지는 따로 얘기 하지 않고 링크만 걸어두겠다.

more devtools

more devtools 는 Chrome Developer Tools: Console 에서 console 에 대한 자세한 내용을 볼 수 있다는 설명입니다.

설명에 보면 Console 은 Firebug 의 Command Line API 를 지원한다고 써 있습니다. 이곳에 가면 console 에서 사용 할 수있는 API 를 자세하게 확인 할 수 있습니다.