sitelink1  
sitelink2  
sitelink3  
sitelink4 http://1 
extra_vars4 ko 
extra_vars5 http://The Error object and throwing your own errors 
extra_vars6 sitelink1 

The Error Object

As promised, we're going to take a closer look at the Error object that gets passed into the catch clause to see just what we can extract from it in an event of an error. The Error object in all browsers support the following two properties:

  1. name: The name of the error, or more specifically, the name of the constructor function the error belongs to.
  2. message: A description of the error, with this description varying depending on the browser.

try{
 document.body.filters[0].apply()
}
catch(e){
 alert(e.name + "n" + e.message)
}

Demo:

Six possible values can be returned by the name property, which as mentioned correspond to the names of the error's constructors. They are:

Error NameDescription
EvalErrorAn error in the eval() function has occurred.
RangeErrorOut of range number value has occurred.
ReferenceErrorAn illegal reference has occurred.
SyntaxErrorA syntax error within code inside the eval() function has occurred. All other syntax errors are not caught by try/catch/finally, and will trigger the default browser error message associated with the error. To catch actual syntax errors, you may use the onerror event.
TypeErrorAn error in the expected variable type has occurred.
URIErrorAn error when encoding or decoding the URI has occurred (ie: when calling encodeURI()).

This level of detail may be useful when you wish to sniff out a specific type of error in your catch clause. In the below, no DIV on the page exists with ID="mydiv". When trying to set its .innerHTML property, a TypeError occurs, since we're trying to assign the .innerHTML property to a null object:

try{
 document.getElementById("mydiv").innerHTML='Success' //assuming "mydiv" is undefined
}
catch(e){
 if (e.name.toString()=="TypeError") //evals to true in this case
  //do something
}

Ok, so maybe it's not that useful most of the time, but you just never know.

Throwing your own errors (exceptions)

Instead of waiting for one of the 6 types of errors above to occur before control is automatically transferred from the try block to the catch block, you can also explicitly throw your own exceptions to force that to happen on demand. This is great for creating your own definitions of what an error is and when control should be transferred to catch.

To throw an error, invoke, well, the throw statement inside your try/catch/finally blocks. The syntax is:

throw myerrorobject

Where myerrorobject can in fact be anything from a string, number, Boolean, to a new or one of the 6 default Error Constructor functions. What myerrorobject is set to mainly just affects what error.name and error.message returns in your catch clause. Most commonly you would just throw a new Error object:

  • throw new Error("Oh oh, an error has occured")

Lets see a meaningful example of throw in action:

function entrycheck(){
 try{
  var agecheck=prompt("This movie is rated PG-13. Please enter your age before continuing:")
  if (isNaN(parseInt(agecheck)))
   throw new Error("Please enter a valid age")
  else if (agecheck<13)
   throw new Error("Sorry, but you are too young for this movie")
  alert("Enjoy the movie!")
 }
 catch(e){
  alert(e.name+" "+e.message)
 }
}

Demo:

Try entering a none numeric value (ie: "haha") or a number less than 13 (ie: 11). In both cases, by using throw, control is instantly transferred to catch, with e.message displaying a different message. Technically entering a string or number less than 13 certainly doesn't constitute an exception in JavaScript, though for our purpose here, they should. That's how throw can be useful- when you need to specify your own parameters of what an error is inside try/catch/finally.

As mentioned, there are a number of other things apart from new Error() you can throw, which changes the contents of the error object passed into catch. The following are all valid throws:

  • throw "An error has occurred"
  • throw true
  • throw new Error("I detect an error!")
  • throw new SyntaxError("Your syntax is no good")

In the last instance, you can substitute SyntaxError with one of the 6 Error constructor function names to throw a specific type of error. In our age check example above, we could have thrown a SyntaxError when the value entered was a string, and a RangeError when the value was less than 13:

function entrycheck(){
 try{
  var agecheck=prompt("This movie is rated PG-13. Please enter your age before continuing:")
  if (isNaN(parseInt(agecheck)))
   throw new SyntaxError("Please enter a valid age")
  else if (agecheck<13)
   throw new RangeError("Sorry, but you are too young for this movie")
  alert("Enjoy the movie!")
 }
 catch(e){
  alert(e.name+" "+e.message)
 }
}

This has the effect of changing what e.name returns- SyntaxError and RangeError, respectively. If that's not enough, you can even throw a generic Error object with custom name and message properties:

throw{
 name: "JavaScriptKit Error",
 message: "Error detected. Please contact webmaster"
}

And with that we throw in the towel!

번호 제목 글쓴이 날짜 조회 수
117 User Agent 관련 Reference URL 황제낙엽 2011.02.22 41
116 각 브라우저 별 User Agent 정보 황제낙엽 2011.02.22 823
115 History of User Agent 황제낙엽 2011.02.22 38
114 Navigator 객체란? 황제낙엽 2011.02.22 53
113 Understanding User-Agent Strings 황제낙엽 2011.02.22 76
112 User Agent 정보 모음 file 황제낙엽 2011.02.22 7768
111 ActiveX 설치 여부를 검사하는 스크립트 황제낙엽 2011.02.13 4053
110 자바스크립트 예약어 황제낙엽 2010.11.03 35
109 YUI Logger(Yahoo) 를 동적으로 로드하는 북마크릿 황제낙엽 2010.10.03 25
108 Javascript 를 사용하여 Binary File 읽기 황제낙엽 2010.09.29 500
107 크로스 브라우저를 위한 브라우저 검사 코드 file 황제낙엽 2010.08.27 86
106 Dynatrace For Ajax Performance 황제낙엽 2010.08.18 45
105 javascirpt IME-Mode 설정하기 황제낙엽 2010.08.17 1112
104 Iframe 내의 페이지 접근방법 황제낙엽 2009.11.12 59
103 외부 라이브러리 (.js) 의 바람직한 동적 로딩 (The best way to load external JavaScript) 황제낙엽 2009.10.05 124
102 숫자값으로의 변환 형태 황제낙엽 2009.09.02 18
101 Boolean 데이터 타입 황제낙엽 2009.09.02 16
100 toString 변환 테이블 황제낙엽 2009.09.02 13
99 URI 인코딩을 해야 하는 문자들 황제낙엽 2009.09.02 23
98 체인 생성자(생성자 체인), 프로토타입 체인 그리고 생성자 재지정 황제낙엽 2009.08.12 55