모든 표현식은 구문이기도 합니다. 구문에 관한 완전한 정보는 <<링크>>Expressions and Operators 를 참조하십시오.
JavaScript 코드는 세미콜론 (;) 문자로 구문을 구분합니다.
이 챕터의 구문에 대한 자세한 내용은 <<링크>>JavaScript 참조 를 참조하십시오.
블록 구문
블록 구문은 구문의 그룹화에 사용합니다. 블록은 중괄호 쌍으로 구분합니다 :
{
statement_1;
statement_2;
.
.
.
statement_n;
}
JavaScript
복사
Ex)
블록 문은 일반적으로 제어 흐름 문 (예 : if , for , while )로 사용됩니다.
while (x < 10) {
x + +;
}
JavaScript
복사
여기에서는 {x + +;} 이 블록 글입니다.
중요 : JavaScript에는 블록 스코프가 없습니다. 블록 안에서 선언 된 변수를 사용할 수 있는 스코프(범위)는 그 블록이 존재하는 함수 또는 스크립트입니다. 즉 변수가 블록 내에서 선언되었다 하더라도 그 함수 (또는 스크립트) 에서는 유효합니다. "독립적인" 블록도 유효한 구문이지만, C 나 Java의 블록과는 기능이 다르기 때문에, JavaScript에서 독립적인 블록을 사용할 필요는 없습니다.
Ex)
var x = 1;
{
var x = 2;
}
JavaScript
복사
alert (x); // 2를 출력블록내의 var x 문은 블록밖 var x 구문과 같은 스코프이기 때문에 이 예제에서는 2가 출력됩니다. C 나 Java에서는 동일한 코드로 1이 출력됩니다.
조건문
조건문은 지정된 조건이 true이면 실행되는 명령의 집합입니다. JavaScript는 if ... else 와 switch 두 조건문을 지원하고 있습니다.
if ... else 문
한 논리가 true라면 구문을 수행 할 때 if 문을 사용하십시오. 옵션 else 절을 사용하면 조건이 false의 경우 구문을 수행 할 수 있습니다. if 문은 다음과 같이 사용합니다 :
if (condition)
statement_1
[ else
statement_2]
JavaScript
복사
condition 는 true 또는 false로 평가되는 식이 들어갑니다. condition 이 true로 평가 된 경우 statement_1 이 실행되고, 그렇지 않은 경우는 statement_2 가 실행됩니다. statement_1 하면 statement_2 어떤 문장이 될 수 있습니다. if 를 더 중첩 할 수 있습니다.
다음과 같이 else if 를 사용하여 문장을 거듭하여 여러 조건을 순차적으로 테스트 할 수 있습니다 :
if (condition)
statement_1
[ else IF (condition_2)
statement_2]
...
[ else IF (condition_n_1)
statement_n_1]
[ else
statement_n]
JavaScript
복사
여러 문장을 실행하려면 블록 ( {} )를 사용하여 글을 그룹화하십시오. 일반적으로 항상 블록 문장을 사용하는 것이 좋은 방법입니다.
특히 if 문을 중첩 된 코드에서 유효합니다 :
if (condition) {
statements_1
} else {
statements_2
}
JavaScript
복사
조건식에 대입을 사용하지 않도록 하십시오. (역주: 비교 연산자 '==' 대신 대입연산자 '=' 사용을 의미함.) 코드를 작성 할 때 할당을 동일 조건이라고 잘못 작성 할 수 있기 때문입니다. 예를 들어 다음과 같은 코드는 사용하지 마십시오 :
if (x = y) {
/ * 진짜 해야 할 일 * /
}
조건식 할당 할 필요가 있는 경우 일반적인 방법은 대입 식을 더 괄호로 묶을 수 있습니다. 예를 들면 :
if ((x = y)) {
/ * 진짜 해야 할 일 * /
}
JavaScript
복사
다음 값은 false로 평가됩니다 :
false
undefined
null
0
NaN
빈 문자열 ( "" )
이 밖의 모든 값은 객체를 포함하여 true 로 평가됩니다.
프리미티브 값(primitive value)인 true 와 false 를 Boolean 객체 true 나 false 값과 혼동하지 마십시오. 예를 들면 :
var b = New Boolean ( false );
JavaScript
복사
if (b) //이 조건은 true로 평가됩니다.
예제다음 예제에서는 함수 checkData 은 Text 객체에 포함 된 문자가 3 인 경우에 true를 돌려주고, 그렇지 않은 경우는 경고를 표시하고 false를 반환합니다.
Function checkData () {
if (document.form1.threeChar.value.length == 3) {
return true ;
} else {
alert ( "Enter exactly three characters." +
document.form1.threeChar.value + "is not valid." );
return false ;
}
}
JavaScript
복사
switch 문
switch 문을 사용하면 프로그램은 식을 실행하고 식의 값을 case 레이블과 비교합니다. 매치하면 프로그램은 결합 된 문장을 실행합니다. switch 문장은 다음과 같이 사용합니다 :
switch (expression) {
case label_1 :
statements_1
[ break ;]
case label_2 :
statements_2
[ break ;]
...
default :
statements_def
[ break ;]
}
JavaScript
복사
프로그램은 먼저 표현식(expression)과 일치하는 case 절을 찾습니다. 그리고 그 case에 해당하는 구문을 실행합니다. 일치하는 case 레이블이 없는 경우, 프로그램은 default 절이 있다면 그 절에 해당하는 구문을 실행합니다. default가 없는 경우, 프로그램은 switch 문 다음의 구문을 계속 실행합니다. 일반적으로, default는 case의 가장 아래쪽에 위치합니다. 하지만 반드시 지켜야 할 규칙은 아닙니다.
각 case 에 연결된 옵션 break 문은 해당하는 case 구문을 실행한 뒤 switch 문에서 빠져나와서, switch 다음에 나오는 구문을을 계속 실행합니다. break를 생략하면, 프로그램은 switch문 내에서 다음 case 문장을 (해당 case가 아닐지라도) 계속 실행합니다.
다음 예에서는 fruittype 가 "Bananas"으로 평가 된 경우 case "Bananas"에 매치하고, 그 case 구문을 실행합니다. break 구문을 만나면 프로그램은 빠져 나와 switch 다음의 구문을 실행합니다. break 를 생략하면 case "Cherries"의 글도 실행됩니다.
Ex)
switch (fruittype) {
case "Oranges" :
document.write ( "Oranges are $ 0.59 a pound.
" );
break ;
case "Apples" :
document.write ( "Apples are $ 0.32 a pound.
" );
break ; case "Bananas" :
document.write ( "Bananas are $ 0.48 a pound.
" );
break ;
case "Cherries" :
document.write ( "Cherries are $ 3.00 a pound.
" );
break ;
case "Mangoes" : case "Papayas" :
document.write ( "Mangoes and papayas are $ 2.79 a pound.
" );
break ; default :
document.write ( "Sorry, we are out of" + fruittype + "
" );
}
document.write ( "Is there anything else you'd like?
" );
JavaScript
복사
순환 구문
루프는 지정된 조건이 충족되는 한 반복되는 명령의 집합입니다. JavaScript는 for , do while , while 같은 루프 문이나, label (label 자체는 루프 문은 없지만,이 글과 함께 자주 사용됩니다)를 지원하고 있습니다. 또한 break 와 continue 문을 순환문에서 사용할 수 있습니다.
또한 for ... in 문에도 글을 반복하지만, 이것은 개체 작업에 사용합니다. 객체 관리 문장 을 참조하십시오.
루프 문은 다음과 같습니다 :
for 문
do ... while 문
while 문
label 글
break 문
continue 문
for 문
for 루프는 지정된 조건이 false로 평가 될 때까지 반복합니다. JavaScript의 for 루프는 Java와 C의 for 루프와 비슷합니다. for 문은 다음과 같이 사용합니다 :
for (initialExpression]; [condition]; [incrementExpression)
statement
JavaScript
복사
for 루프를 실행하면 다음과 같은 일이 일어납니다 :
1. 초기화 식 initialExpression 을 있으면 실행합니다. 이 식은 일반적으로 루프 카운터를 초기화하지만, 더 복잡한 식을 지정할 수도 있습니다. 또한 이 식은 변수를 선언 할 수 있습니다.2. condition 구문을 평가합니다. condition 의 값이 true이면 루프 문을 실행합니다. condition 의 값이 false이면, for 루프를 종료합니다. condition 식이 완전히 생략되는 경우는 true로 간주합니다.3. for 안에 있는 구문을 실행합니다. 여러 문장을 실행하려면 블록 문장 ( {} )를 사용하여 구문을 그룹화 할 수 있습니다.4. 갱신 식 incrementExpression 을 있으면 실행합니다. 그리고 제어를 2 단계로 돌아갑니다.
예다음 함수는 스크롤 목록 (복수 선택할 수 Select 객체)에서 선택한 옵션의 수를 세는 for 문이 포함되어 있습니다. for 문에서 변수 i 를 정의하고 이를 0으로 초기화합니다. i 가 Select 객체의 옵션의 개수보다 작은 지 확인하고 계속 if 문을 실행하고 루프가 1 회전하면 i 를 1만큼 증가시킵니다.
function howMany (selectObject) {
var numberSelected = 0;
for (var i = 0; i < selectObject.options.length ; i++) {
if (selectObject.options[i].selected)
numberSelected++;
}
return numberSelected;
}
JavaScript
복사
do ... while 문
do ... while 문은 지정된 조건이 false로 평가 될 때까지 반복합니다. do ... while 문은 다음과 같이 사용합니다 :
do
statement
while (condition);
JavaScript
복사
statement 는 조건이 확인되기 전에 한 번 실행됩니다. 여러 문장을 실행하려면 블록 문장 ( {} )를 사용하여 구문을 그룹합니다. condition 이 true의 경우, 그 구문이 다시 실행됩니다. 매번 실행 된 후 조건이 확인됩니다. 조건이 false의 경우는 실행이 중지되고 do ... while 다음의 문장으로 이동합니다.
예다음 예제에서는 do 루프가 적어도 한 번 이상 반복되고 i가 5보다 작은 상태에서 멈출 때까지 반복됩니다.
do {
i + = 1;
document.write (i);
} while (i < 5);
JavaScript
복사
while 문
while 문은 지정된 조건이 true로 평가되는 한 문장을 실행합니다. while 문은 다음과 같이 사용합니다 :
while (condition)
statement
JavaScript
복사
조건이 false이면 루프 statement 의 실행을 중지하고 루프 다음의 문장에 제어가 넘어갑니다.
루프 statement 를 실행하기 전에 조건이 테스트됩니다. 조건이 true를 반환하면 statement 가 실행되고, 다시 조건을 테스트합니다. 조건이 false를 반환 실행이 중지되고 while 뒤에 나오는 문장이 넘어갑니다.
여러 문장을 실행하려면 ({})를 사용하여 구문을 그룹화하십시오.
예제 1다음 while 루프는 n 이 3보다 작은 한 반복됩니다 :
n = 0;
x = 0;
while (n < 3) {
n + +;
x + = n;
}
JavaScript
복사
각각의 반복에서 루프는 n 을 증가시키고 그 값을 x 에 추가됩니다. 그 결과, x 와 n 은 다음 값을 취합니다 :
제 1 단계 종료 후 : n = 1, x = 1
제 2 단계 종료 후 : n = 2, x = 3
제 3 단계 종료 후 : n = 3, x = 6
3 단계가 완료되면 조건 n < 3 이 true가 없으므로 루프는 종료합니다.
무한 루프에 주의 하세요. 루프 조건이 최종적으로 false가 되는 것을 확인 해야 합니다. 그렇지 않으면 루프가 종료되지 않습니다. 다음 while 루프의 문은 영원히 실행됩니다. 이것은 조건이 결코 false가 되지 않기 때문입니다 :
Ex 2)
while ( true ) {
alert ( "Hello, world" );
}
JavaScript
복사
label 문
label를 사용하면 프로그램의 어디에서나 볼 수 있는 식별자를 가진 문장을 만들 수 있습니다. 예를 들어, 레이블을 사용하여 한 루프에 이름을 붙이면, break 문과 continue 문을 사용하여 프로그램이 루프를 탈출할지 그대로 실행을 계속 할 것인가를 나타낼 수 있습니다.
label 문장은 다음과 같이 사용합니다 :
label :
statement
JavaScript
복사
label 값은 예약어로 JavaScript 식별자로 사용할 수 있습니다. 레이블을 사용하여 이름을 붙입니다. 여기서 statement는 어떤 문장이든 올 수 있습니다.
예이 예에서는 markLoop 레이블을 사용하여 while 루프에 이름을 붙이고 있습니다.
markLoop :
while (theMark == true ) {
doSomething ();
}
JavaScript
복사
break 문
break 는 루프 나 switch 문장의 종료와 label 문에 연결하는 데 사용합니다.
break 라벨을 사용하지 않으면, 가장 안쪽에 있는 while 과 do-while , for , switch 에서 계속 수행 됩니다..break 문에 레이블을 사용하면 지정된 라벨이 붙은 문에서 빠져 나오게 됩니다.
break 문은 다음과 같이 사용합니다 :
break;
break Label ;
JavaScript
복사
첫 번째 형식의 구문은 가장 안쪽의 루프 또는 switch 에서 빠져 나옵니다. 두 번째 형식의 구문은 지정된 label 문을 가진 루프 등을 종료합니다.
다음 예제는 값이 theValue 인 요소의 인덱스를 찾을 때까지 배열의 요소에 대해 반복합니다 :
Ex)
for (i = 0; i < a.length; i + +) {
if (a [i] == theValue)
break ;
}
예 2 : label을 사용 break
var x = 0;
var z = 0
labelCancelLoops : while ( true ) {
console.log ( "Outer loops :" + x);
x + = 1;
z = 1;
while ( true ) {
console.log ( "Inner loops :" + z);
z + = 1;
if (z === 10 && x === 10) {
break labelCancelLoops;
} else IF (z === 10) {
break ;
}
}
}
JavaScript
복사
continue 문
continue 문은 while 문, do-while 문, for 문, label 문을 다시 시작하기 위해 사용합니다.
라벨을 붙이지 않고 continue 를 사용하면 현재 반복하는 것으로 가장 안쪽에 있는 while 문, do-while 문, for 문을 종료하고 다음 반복 실행에 옮깁니다. break 문과 달리 continue 는 루프 전체의 실행을 종료하지 않습니다. while 루프는 조건 비교 부분으로 돌아갑니다. for 루프는 increment-expression 부분으로 돌아갑니다.
레이블을 사용하여 continue 문을 사용하면 label로 지정된 루프 문으로 돌아갑니다.
continue 문은 다음과 같이 사용합니다 :
continue;
continue Label ;
JavaScript
복사
다음 예제에서는 i 의 값이 3시에 실행되는 continue 문을 가진 while 루프입니다. 이렇게 해서 n 은 순서 1,3,7,12라는 값을 갖습니다.
Ex)
i = 0;
n = 0;
while (i < 5) {
i + +;
if (i == 3)
continue ;
n + = i;
}
JavaScript
복사
checkiandj 라는 레이블이 붙은 글 중에, checkj 이라고 붙어 글이 있습니다. continue 에 만나면 프로그램은 checkj 의 현재 반복을 종료하고 다음 반복을 시작합니다. continue 를 우연히 만날 때마다 조건이 false 가 될 때까지 checkj 를 반복합니다. false 가 반환되면 checkiandj 글의 나머지를 완료하고 조건이 false 를 반환까지 checkiandj 를 반복합니다. false 가 반환되면 checkiandj 에 계속 문이 실행됩니다.
continue 가 checkiandj 레이블을 가지고, 프로그램은 checkiandj 문장 처음부터 계속합니다.
Ex 2)
checkiandj :
while (i <4) {
document.write (i + "
" );
i + = 1;
checkj :
while (j > 4) {
document.write (j + "
" );
j - = 1;
if ((j % 2) == 0)
continue checkj;
document.write (j + "is odd.
" );
}
document.write ( "i =" + i + "
" );
document.write ( "j =" + j + "
" );
}
JavaScript
복사
객체 관리 문장
JavaScript는 객체에 대한 작업 for ... in , for each ... in 및 with 문을 사용합니다.
for ... in 문
for ... in 문은 지정된 변수를 개체의 모든 속성을 반복합니다. 각각의 속성에 JavaScript는 지정된 문을 실행합니다. for ... in 문은 다음과 같이 사용합니다 :
for (variable in object) {
statements
}
JavaScript
복사
다음 함수는 개체와 개체의 이름을 취하고 있습니다. 그리고 그 개체의 모든 속성을 반복하여 속성 이름과 값을 목록 화 한 문자열을 반환합니다.
Ex)
Function dump_props (obj, obj_name) {
var result = "" ;
for ( var I in obj) {
result + = obj_name + "" + i + "=" + obj [i] + "
" ;
}
result + = "
" ;
return result;
}
JavaScript
복사
make 및 model 이라는 속성을 가진 car 라는 객체는 다음과 같은 결과를 얻을 수 있습니다 :
car.make = Ford
car.model = Mustang
JavaScript
복사
배열
Array 의 요소를 반복하는 방법으로 이것을 사용하는 것은 매력적인지도 모릅니다 만, for ... in 문은 배열의 요소 외에 사용자 정의 속성에 대해서도 반복하기 때문에 자신의 속성과 메소드를 추가하는 등 Array 객체를 변경하면 for ... in 문은 숫자 인덱스 이외에 사용자 정의 속성의 이름을 반환합니다. 따라서 배열을 반복 할 때 숫자 인덱스를 이용한 기존의 for 루프를 사용하는 것이 좋습니다.
for each ... in 문
for each ... in 는 JavaScript 1.6 에 도입 된 루프 글입니다. for ... in 비슷하지만, 이쪽은 개체의 속성 이름 대신 속성 값을 반복합니다.
var sum = 0;
var obj = {prop1 : 5, prop2 : 13, prop3 : 8};
for Each ( var Item in obj) {
sum + = item;
}
print (sum); / / 5 +13 +8에서 "26"와 출력
JavaScript
복사
주석
주석은 스크립트의 동작을 설명하는 메모에 사용합니다. 주석은 실행시 무시됩니다. JavaScript는 Java와 C + + 형식의 주석을 지원합니다 :
한 줄의 주석은 이중 슬래시 (//)에서 시작됩니다.여러 줄에 걸친 주석은 /* 시작, */로 끝납니다.
예 다음 2 개의 코멘트의 예를 보여줍니다.
// 이것은 1 줄 주석.
/* 이것은 여러 줄 주석. 어떤 길이라도 상관 없다.
쓰고 싶은 것을 뭐든지 여기에 쓸 수 있다. */
JavaScript
복사
예외 처리 문
throw 문을 사용하면 예외를 발생 할 수 있습니다. 또한 try ... catch 문을 사용하면 예외를 처리 할 수 있습니다.
try ... catch 문을 사용하여 Java의 예외를 처리 할 수 있습니다 (여기에는 bug 391642 문제가 있지만). 이 정보는 JavaScript에서 Java의 예외 처리 및 Java 및 JavaScript와 통신 을 참조하십시오.
예외 타입
JavaScript는 거의 어떤 개체도 throw 할 수 있습니다. 그렇다고 해도, 반드시 throw된 개체 모두가 동일하게 만들어지는 것은 아닙니다. 숫자 나 문자열을 오류로 전달하는 방법은 자주 사용되지만,이 용도를 위해 특별히 제작 된 예외객체 중 하나를 사용하는 것이 더 효율적인 경우가 많습니다 :
ECMAScript의 예외
DOMException
nsIXPCException ( XPConnect )
throw 문
throw 문은 예외를 발생하기 위하여 사용합니다. 예외를 던질 때 전달하는 값을 포함하는 객체를 사용하십시오 :
throw Expression;
특정 식뿐만 아니라, 모든 식을 던질 수 있습니다. 아래의 코드는 다양한 형태의 예외를 던지고 있습니다 :
throw "Error2" ;
throw 42;
throw true ;
throw {toString : function () { return "I'm an object!" ;}};
JavaScript
복사
주의 : 예외를 던질 때 개체를 지정할 수 있습니다. 그러자 catch 블록에서 해당 개체의 속성을 볼 수 있습니다. 다음 예제에서는 UserException 라는 종류의 myUserException 개체를 만듭니다.
// UserException라는 형식의 개체를 만들
Function UserException (message) {
this . message = message;
this . name = "UserException" ;
}
// 문자열로 사용되는 경우 (예 : 오류 콘솔)에
// 예외 메시지를 조합
UserException.prototype.toString = function () {
return this . name + ': "' + this . message + ' "' ;
}
// UserException의 인스턴스를 생성하고 그것을 throw 한다.
throw New UserException ( "Value too high" );
JavaScript
복사
try ... catch 문
try ... catch 문은 테스트하려는 구문 블록을 지정하고 예외에 대한 하나 이상의 대처 방법을 지정합니다. 예외가 throw 되고, try ... catch 문이 그것을 처리합니다.
try ... catch 문은 하나의 try 블록과 0 개 이상의 catch 블록으로 구성됩니다. 전자는 하나 이상의 구문을 포함합니다. 후자는 try 블록에서 예외가 throw 되면 어떻게 할 것인지 지정하는 구문을 포함합니다. 즉, 성공시키고 싶다 try 블록과 실패로 이전 catch 블록으로 구성됩니다. try 블록 (또는 try 블록 내에서 호출 된 함수) 중 하나의 구문이 예외를 던지면, 제어는 즉시 catch 블록으로 이동합니다. try 블록에서 예외가 발생하지 않으면, catch 블록은 실행되지 않습니다. finally 블록은 try 및 catch 블록을 실행 한 후 실행합니다.
다음 예제에서는 try ... catch 문을 사용하고 있습니다. 이 예제에서는 전달 된 값에 따라 배열로부터 월 이름을 추출 기능을 수행합니다. 값에 해당하는 월의 숫자 (1-12)이없는 경우는 "InvalidMonthNo" 라는 값 예외가 던져지고 catch 블록의 문장은 monthName 라는 변수에 unknown 이라는 값을 설정합니다.
Function getMonthName (mo) {
mo = mo-1; // 월의 숫자를 배열의 인덱스에 맞추기 (1 = Jan, 12 = Dec)
var months = New Array ( "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" );
if (months [mo]! = null ) {
return months [mo]
} else {
throw "InvalidMonthNo"
}
}
try {
// 실행을 시도 글
monthName = getMonthName (myMonth) // 함수는 예외를 던질 수 있다
}
catch (e) {
monthName = "unknown"
logMyErrors (e) // 예외 개체를 오류 처리기에 전달
}
JavaScript
복사
catch 블록
단일 catch 블록을 사용하면 try 블록에서 발생할 수 있는 모든 예외를 처리 할 수 있습니다.
catch (catchID) {
statements
}
JavaScript
복사
catch 블록은 throw 문에서 지정된 값을 유지하는 식별자 (위의 구문에서 catchID )을 지정합니다. 이 식별자를 사용하여 던져진 예외에 대한 정보를 얻을 수 있습니다. JavaScript는 catch 블록에 들어갈 때 이 식별자를 만듭니다. 식별자는 catch 블록에 있는 동안 만 지속됩니다. 즉, catch 블록이 끝나면, 그 식별자는 더 이상 사용할 수 없게 됩니다.
예를 들어, 다음 코드는 예외를 던집니다. 예외가 발생하면 제어가 catch 블록에 전달됩니다.
try {
throw "myException" // 예외를 생성
}
catch (e) {
// 어떤 예외도 처리
logMyErrors (e) // 예외 개체를 오류 처리기에 전달
}
JavaScript
복사
finally 블록
finally 블록은 try 및 catch 블록이 끝난 후 실행되는 문장으로 구성됩니다. finally 는 예외가 발생해도 항상 실행됩니다. 예외가 던져지면, finally 블록의 구문은 예외 처리를 하는 catch 블록이 없어도 실행됩니다.
finally 블록을 사용하여 예외에 해당 스크립트를 중지 할 수 있습니다. 예를 들어, 스크립트에서 사용하는 리소스를 해제해야 할 수도 없습니다. 다음 예제에서는 파일을 열고 파일을 사용하는 문장을 실행합니다 (서버 측 JavaScript는 파일에 액세스 할 수 있습니다). 파일을 여는 동안 예외가 던져지는 스크립트가 정지되기 직전에 finally 블록이 파일을 닫습니다.
openMyFile ();
try {
writeMyFile (theData); // 오류를 던질 가능성이 있다
} catch (e) {
handleError (e); // 오류가 발생, 그것을 처리하자
} finally {
closeMyFile (); // 항상 리소스 닫기
}
JavaScript
복사
finally 블록이 값을 돌려주는 경우, 그 값은 try 및 catch 블록의 return 문에 관계없이 try-catch-finally 전체가 생성 반환합니다 :
Function F () {
try {
alert (0);
throw "bogus" ;
} catch (e) {
alert (1);
return true ; //이 반환 값은 finally 블록이 완료 될 때까지 보류됩니다
alert (2); // 여기에 도달 할 수 없습니다
} finally {
alert (3);
return false ; // 이전 "return"을 덮어 씁니다
alert (4); // 여기에 도달 할 수 없습니다
}
// 여기에서 "return false"가 실행됩니다
alert (5); // 여기에 도달 할 수 없습니다
}
f(); // 0, 1, 3 및 경고 표시, false를 돌려줍니다
JavaScript
복사
try ... catch 문 중첩
하나 이상의 try ... catch 문을 중첩 할 수 있습니다. 내부 try ... catch 문에 catch 블록이 없는 경우, 둘러싸고 있는 try ... catch 문 catch 블록이 일치하는지 확인합니다.
Error 객체의 활용
오류의 유형에 따라보다 정확한 메시지를 얻기 위해 'name'과 'message'속성을 이용할 수 있습니다. 'name'은 오류의 일반적인 클래스 (예를 들어 'DOMException'나 'Error')을 보여 한편 'message'는 일반적으로 Error 개체를 문자열로 변환하여 얻은 것보다 간결한 메시지를 보여줍니다.
자신의 예외를 던지는 경우 이러한 속성을 이용하기 위해 (catch 블록에서 자신의 예외와 시스템의 예외를 구별하지 않는 경우 등), Error 생성자를 이용할 수 있습니다. 예를 들면 :
Function doSomethingErrorProne () {
if (ourCodeMakesAMistake ()) {
throw ( New Error ( 'The message' ));
}
else {
doSomethingToGetAJavascriptError ();
}
}
....
try {
doSomethingErrorProne ();
}
catch (e) {
alert (e.name); // 'Error'와 경고 표시
alert (e.message); // 'The message'또는 JavaScript 오류 메시지를 경고 표시
}
JavaScript
복사
저작권 공지
이 문서의 모든 저작권은 Mozilla.org에 있습니다. 이 문서는 "모질라 기여자"들에 의해 작성 되었습니다. 원문 보기저희가 한글로 번역한 2차적저작물에 대한 저작권 역시 Mozilla.org에 있습니다.