[완료] javascript, try catch 문...

doodoo의 이미지

ibm.com 싸이트에서 ajax 관련 글을 보다가

var request = false;
try {
  request = new XMLHttpRequest();
} catch (failed) {
  request = false;
}

try {
  request = new XMLHttpRequest();
} catch (trymicrosoft) {
  try {
    request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
    try {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {
      request = false;
    }
  }
}

위의 두 문의 catch 문에보면 하나는 failed 를 잡아 내는것처럼 보이고
두번째는 trymicrosoft 를 잡아내는 것처럼 보이는데...
저렇게 아무문장이나 써도 되는 것 입니까?

예를 들어 내 맘대로
catch ( not_work ) 등등으로...써버려도 되는건가요?

peecky의 이미지

네, 변수 이름이나 함수 파라메터 이름 정도로 보시면 됩니다.

정적 타입의 언어와 다르게 특정 에러별로 catch를 따로 구분하지 않고, 항상 try와 1:1로 매칭됩니다.

try {
	throw new Error("my error");
}
catch(e) {
	if(e.message == "my error") my_handle_exception(e);
}

위와 같은 방법으로 user defined 에러를 구분할 수는 있지만, 브라우저가 자체적으로 발생시키는 에러는 브라우저별, 언어팩 별 message 값이 제각각이라...
대부분 어떤 에러가 발생할 지 예측 가능한 atomic한 구문에다 try - catch를 씁니다.

doodoo의 이미지

감사합니다.
그니깐....

try {
  request = new XMLHttpRequest();
} catch (trymicrosoft) {
  try {
    request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
    try {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {
      request = false;
    }
  }
}

에서 첫번째 catch 의 trymicrosoft 는 XMLHttpRequest() 가 뱉어낸것이 아니고...
두번째 othermicrosoft 는 ActiveXObject("Msxml2.XMLHTTP") 가 뱉어낸것이 아니고...등등
그렇다는 거죠? (아직도 햇갈리고 있다는....ㅠㅠ)
peecky의 이미지

아닌게 아니라 맞아요.

new XMLHttpRequest() 가 성공하면 그대로 끝이고, 실패하면 catch(trymicrosoft) { ... } 가 실행됩니다.

catch(trymicrosoft) { ... } 안에서 new ActiveXObject("Msxml2.XMLHTTP") 가 실패하면 catch (othermicrosoft) { ... } 가 실행됩니다.

참고로 말씀드리면 XMLHttpRequest 객체는 Firefox, Opera, IE 7 이상 버전에서 지원합니다. 이 브라우저들은 new XMLHttpRequest() 한 번으로 끝나고, IE 6 이라면 Msxml2.XMLHTTP 를 지원하므로 new ActiveXObject("Msxml2.XMLHTTP") 에서 끝납니다. IE 5.5라면 new ActiveXObject("Microsoft.XMLHTTP") 에서 끝나며, 기타 ajax를 지원하지 않는 브라우저들은 catch (failed) { ... } 까지 실행됩니다.

doodoo의 이미지

아...그게 아니고....

new XMLHttpRequest() 가 성공하면 그대로 끝이고, 실패하면 catch(trymicrosoft) { ... } 가 실행됩니다.

는 알겠는데.....

실제로 catch(trymicrosoft), catch (othermicrosoft) 에서 쓴 trymicrosoft와 othermicrosoft 란
단어 때문 입니다.

아무거나 작위적으로 가져다 혹은 작명하여 써도 되는것인가? 이 예에서는 그렇게 되어 있어보인다 그런 예기이지요.

송효진의 이미지

다른 언어에서는
catch(YourException e)
인데,
그냥 catch(e) 라서 헷갈리셨나보네요.
js 는 타입선언 없이 그냥 익셉션 객체를 받아옵니다.
당연히 변수고요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

zoopi의 이미지

failed나 trymicrosoft는 예외객체의 이름(그러니까 변수 이름 정도)으로 해석하시면 됩니다.
catch내부에서 받아온 예외가 구체적으로 어떤건지 액세스 하려면 이름이 있어야 하니까 그냥 변수이름 정하듯이 정한거죠.

doodoo의 이미지

감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.