ErrorHandling [JavaScript Tutorials] Error handling in JavaScript using try/catch/finally - The Error object and throwing your own errors (해석중)
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 Name | Description |
---|---|
EvalError | An error in the eval() function has occurred. |
RangeError | Out of range number value has occurred. |
ReferenceError | An illegal reference has occurred. |
SyntaxError | A 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. |
TypeError | An error in the expected variable type has occurred. |
URIError | An 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)
}
}
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!
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
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 정보 모음 | 황제낙엽 | 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 | 크로스 브라우저를 위한 브라우저 검사 코드 | 황제낙엽 | 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 |