[완료] javascript, try catch 문...
글쓴이: doodoo / 작성시간: 금, 2009/06/19 - 10:44오전
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 ) 등등으로...써버려도 되는건가요?
Forums:
네, 변수 이름이나
네, 변수 이름이나 함수 파라메터 이름 정도로 보시면 됩니다.
정적 타입의 언어와 다르게 특정 에러별로 catch를 따로 구분하지 않고, 항상 try와 1:1로 매칭됩니다.
위와 같은 방법으로 user defined 에러를 구분할 수는 있지만, 브라우저가 자체적으로 발생시키는 에러는 브라우저별, 언어팩 별 message 값이 제각각이라...
대부분 어떤 에러가 발생할 지 예측 가능한 atomic한 구문에다 try - catch를 씁니다.
감사합니다. 그니깐...
감사합니다.
그니깐....
에서 첫번째 catch 의 trymicrosoft 는 XMLHttpRequest() 가 뱉어낸것이 아니고...
두번째 othermicrosoft 는 ActiveXObject("Msxml2.XMLHTTP") 가 뱉어낸것이 아니고...등등
그렇다는 거죠? (아직도 햇갈리고 있다는....ㅠㅠ)
아닌게 아니라
아닌게 아니라 맞아요.
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) { ... } 까지 실행됩니다.
아...그게
아...그게 아니고....
는 알겠는데.....
실제로 catch(trymicrosoft), catch (othermicrosoft) 에서 쓴 trymicrosoft와 othermicrosoft 란
단어 때문 입니다.
아무거나 작위적으로 가져다 혹은 작명하여 써도 되는것인가? 이 예에서는 그렇게 되어 있어보인다 그런 예기이지요.
다른
다른 언어에서는
catch(YourException e)
인데,
그냥 catch(e) 라서 헷갈리셨나보네요.
js 는 타입선언 없이 그냥 익셉션 객체를 받아옵니다.
당연히 변수고요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
윗분 말씀이 맞네요
failed나 trymicrosoft는 예외객체의 이름(그러니까 변수 이름 정도)으로 해석하시면 됩니다.
catch내부에서 받아온 예외가 구체적으로 어떤건지 액세스 하려면 이름이 있어야 하니까 그냥 변수이름 정하듯이 정한거죠.
감사합니다.
감사합니다.
댓글 달기