문장

2014. 10. 16. 13:56 나홀로스터디/JS 완벽가이드


6장 문장

이 포스팅은 "자바스크립트 완벽 가이드(인사이트, 송인철,이동기,이유원,황인석 옮김)"에서 발췌 요약한 것입니다.
 
6.1 표현문
6.2 복합문
6.3 if/else
6.4 else if
6.5 switch
6.6 while
6.7 do/while
6.8 for
6.9 for/in
6.10 레이블
6.11 break
6.12 continue
6.13 var
6.14 function
6.15 return
6.16 throw
6.17 try/catch/finally
6.18 with
6.19 빈문장


표현식이란 평가되어 어떤 값을 내줄 수 있는 자바 스크립트 구절이다.



6.1 표현문
할당문이 표현문에 속한다.

 i += 3;



++ 와 -- 같은 증감 연산자들은 변수값을 바꾼다는 부수 효과가 있는데 이는 할당이 일어난 것 같은 효과를 보인다.

 counter++;



delete 연산자는 객체 프로퍼티를 삭제하므로 문장으로서 쓰이는게 대부분이다.

 delete o.x;



표현문의 다른 주요 부류로 함수 호출이 있다.

window.close();

 
 


6.2 복합문
하나의 표현식 안에 다수의 표현식을 합칠 때에는 쉼표 연산자를 사용하는데 자바스크립트에서는 하나의 문장에 다수의 문장을 합칠 수 있는 방법도 제공한다. (문장 블록이라고도 부른다)

 {
 x = Math.PI;
 cx = Math.cos(x);
 allert("cos( " + x + " ) = " + cx);
 } 

자바스크립트 인터프리터가 복합문의 모든 문장을 실행한다.
간혹 복합문의 실행 도중 중단되는 것은 복합문 안에 break, continue, return, throw 문장이 있을때 일어난다.


 

6.3 if/else
조건부로 문장을 실행할 수 있는 기능을 제공하는 기본적인 제어문으로 어떤 조건의 테스트 결과에 따라 둘 중 하나의 코드를 실행하며  형태는 다음과 같다.

if(표현식){
  문장1
} else {
  문장2
}

 


6.4 else if
여러조건의 코드를 실행하기 위한 방법으로 else if문이 있다.

 


6.5 switch
switch문이 실행되면 '표현식'의 값을 계산하고 이 값에 대응하는 case레이블을 찾는다.  올바른 레이블을 찾으면 case 레이블 직후에 나오는 문장을 실행하고 찾지 못하면 특수 레이블인 default: 레이블 직후의 첫번째 문장을 실행한다. 하나의 case 문에는 하나의 break문을 삽입하는 것을 잊지 말아야 한다.

switch(표현식){
  case 1: 
    코드 블록 #1 실행
    break;
  case 2: 
    코드 블록 #2 실행
    break;
  defailt:
    코드 블록 #3 실행
    break;
} 

대응하는 case를 판별하는 데에는 동등 연산자(==)가 아닌 일치 연산자(===)가 사용된다.




6.6 while
while문은 기본적인 반복문으로서 자바스크립트로 하여금 반복적인 행동을 수행할 수 있게 한다.

while(표현식){
  문장
} 

먼저 표현식을 평가한후 그 값이 true이면 while루프의 몸체를 형성하는 문장이 실행되고 표현식이 다시 평가되는데 이것은 표현식이 'false'로 평가됟때까지 반복된다.

 


6.7 do/while
do/while 루프는 while루프와 비슷하지만 루프 표현식이 테스트되는 곳이 처음이 아니라 마지막이므로 최소 한번은 루프 몸체가 실행된다.

do{
  문장
}while(표현식);

루프 조건을 명시하며 끝나기 때문에 while문과 다르게 세미콜론을 붙인다.

 



6.8 for
이 변수는 시작하기전 초기화되고 표현식을 평가하고 루프 몸체의 끝에서 표현식이 다시 평가되기 직전에 카운터 변수가 증가되거나 갱신된다.

for(초기화; 테스트; 증가){
  문장
}
 

자바스크립트는 '초기화' 자리에 var에 의한 변수 선언문도 허용하고 있기 대문에 루프 카운터를 선언하는 동시에 초기화할 수도 있다.
'테스트' 표현식은 매회 반복이 일어나기 직전에 평가되며 루프의 몸체를 실행할지 여부를 제어하는데 표현식이 true이면 루프 몸체의 '문장'이 실행된다.
'증가' 표현식은 할당 표현식이거나 ++나 -- 연산자를 사용하는 표현식이다.

 


6.9 for/in
배열의 모든 원소에 대하여 루프를 돌리려면 간단히 인덱스 변수를 증가시키면서 while 이나 for 루프를 돌리면 된다.
for/in 문은 객체의 모든 프로퍼티에 대해 루프를 돌리는 방법을 제공한다.

for (변수 in 객체){
  문장
} 


'변수'는 변수이름 또는 변수/배열 객체/객체 프로퍼티를 선언하는 var문이어야 한다.
'객체'는 객체이름 또는 객체로 평가될수 있는 표현식이어야 한다.
'문장'은 루프의 몸체를 구성하는 문장 또는 문장 블록이어야 한다.

for/in 루프에서 객체 프로퍼티들이 변수에 할당되는 순서는 정해져있지 않고 사용자 정의 프로퍼티들과 상속된 사용자 정의 프로퍼티는 모두 열거되지만 많은 수의 내장 프로퍼티는 열거되지 않는다.

 


6.10 레이블
어떤 문장에라도 그 앞에 식별자 이름과 콜론을 삽입함으로써 레이블을 붙일 수 있다.

 식별자: 문장

예약어를 제외한 모든 적법한 자바스크립트 식별자는 '식별자'가 될 수 있고 레이블 이름은 변수나 함수 이름과는 전혀 별개로 취급되므로 충돌을 걱정할 필요는 없다.
어떤 문장에 레이블을 붙이면 프로그램의 다른 곳에서 그문장을 참조할 수 있는 이름이 생기는 것이다.
레이블을 붙이는 문장은 while, do/while, for, for/in과 같은 루프뿐이다.

 



6.11 break
break의 역할은 루프나 switch에서 빠져나오게 하는것이므로 break문을 사용하는 것은 오직 루프나 switch문에서만 적법하다.
자바스크립트에서는 break 키워드 뒤에 레이블 이름이 따라올 수 있는데 break와 레이블 사이에서 줄을 나누면 세미콜론을 자동 삽입하는 특징때문에 줄바꿈이 허용되지 않는다.

 



6.12 continue
continue문 역시 레이블과 함께 쓰일수 있는데 단독형식과 레이블에 상관없이 항상 while, do/while, for, for/in 루프의 몸체 내부에서 사용되어야만 한다.
이 구문이 실행되면 이를 감싸고 있던 루프의 현재 반복을 종료하고 다음 반복을 시작하는데 이때 루프의 종류에 따라 다른일이 일어난다.

- while : 시작부분에 지정된 '표현식'을 다시 테스트하고 결과가 true이면 루프 몸체부터 다시 실행한다.
- do/while : 일단 루프의 끝부분까지 건너뛰고 다시 테스트하여 결과가 true이면 루프 몸체부터 다시 실행한다.
- for : '증가'표현식을 평가한 후 '테스트' 표현식을 테스트하여 다음 반복 수행을 결정한다.
- for/in : 다음 차례의 프로퍼티 이름을 루프 시작에서 지장된 변수에 할당한 후 다시 시작한다.

while 루프는 루프 조건으로 곧장 귀환하는 반면 for 루프는 일단 '증가' 표현식을 평가한 후에 루프 조건으로 귀환한다.

 



6.13 var
var문은 명시적으로 하나 또는 그 이상의 변수를 선언하는데 쓰인다.

 var 이름_1[ = 값_1] [ , .... , 이름_n[ = 값_n]] 

함수 내부에서 사용되는 var 문은 해당 함수의 호출 객체에 주어진 변수 이름의 프로퍼티를 생성함으로써 변수를 정의하고 함수 외부에서 나타난것이라면 전역 객체에 마찬가지로 프로퍼티를 생성함으로써 변수를 정의한다.
var 문에 의해 생성되는 프로퍼티는 delete 연산자로 삭제될 수 없고 변수에 초기값을 지정하지 않으면 변수 정의는 되지만 초기값은 undefined가 된다.

 



6.14 function
fonction문은 자바스크립트 함수를 정의하는데 쓰인다.

function 함수 이름([전달인자1[전달인자2[..., 전달인자n]]]){
  문장  
}


함수 몸체는 임의 개수의 자바스크립트 문장으로 구성되고 중괄호를 사용하여 문장들을 묶는다.
이 문장들은 함수가 정의 될때 실행되는것이 아니고 실행 연산자()에 의한 함수 호출로 이 함수가 컴파일되고 실행될 수 있는 형태의 새로운 함수 객체와 연결되었을때 실행된다.

함수를 정의할 때 다른 함수 정의 속에 중첩시킬수 있는데 if문, while문, 기타 문장 속에는 함수 정의가 위치할수 없다.
자바스크립트 프로그램에서 문장은 동적인 행위를 일으켜야 하는데 함수 정의의 function 문은 정적인 구조를 나타내므로 원칙적으로는 문장이 아니다.
함수는 자바스크립트 코드가 실제로 실행되기 이전의 파싱 또는 컴파일 단계에서 정의된다.
자바스크립트 파서가 함수 정의를 만나면 함수 몸체를 이루는 문장들을 파싱하고 저장한다.(실행하지 않는다)
그리고나서 이 함수를 유지할 프로퍼티를 이 함수와 동일한 이름으로 정의한다.

 



6.15 return
return문은 함수 호출 표현식의 값, 즉 함수에서 반환되는 값을 지정하는데 쓰이므로 함수 몸체 내부에서만 나타날 수 있다.

return 표현식; 

함수에서 '표현식'이 없는 return문을 실행하거나 함수 몸체 끝에서 함수가 반환된다면 해당 함수의 표현식의 값은 undefined가 된다.

 


6.16 throw
'예외'란 무언가 예외적인 상황이나 에러가 발생했음을 가리키는 신호로 예외를 '발생시키다(throw)'라는 것은 그런 에러나 예외 상황을 알린다는 뜻이고 예외를 '잡아내다(catch)'라는 것은 그것을 처리한다는 뜻이다.
자바스크립트에서는 런타임 에러가 일어날 때마다 예외를 발생시키고 프로그램에서 throw문을 사용하여 명시적으로 예외를 발생시킬수도 있다.

throw 표현식; 

'표현식'의 결과값 타입은 무엇이든 될수 있지만 대부분 타입은 Error 객체 또는 Error 하위 클래스 중 하나의 인스턴스가 되곤한다.

 



6.17 try/catch/finally
try/catch/finally 문은 자바스크립트 예외 처리 기법이다.
try 절은 처리할 예외가 발생할지도 모를 코드 블록을 정의하는 역할을 하고 catch 절은 try 블록 내부에서 예외가 발생하는 경우 호출되는 문장 블록이다. finally 블록은 try 블록에서 일어난 일에 관계없이 항상 실행이 보장되어야할 뒷정리용 코드가 포함된다.
catch나 finally 블록은 생략할 수 있지만 try 블록은 catch나 finally 중 적어도 하나 이상의 블록과 함께 사용되어야만 한다.

 


6.18 with

with 문은 유효 범위 체인(변수 이름 판별을 위해 순서대로 검색되는 객체 리스트)을 임시로 변경할때 쓰인다.

with(객체)
문장

with에 의해 추가된 객체는 일시적으로 유효 범위 체인의 일부가 되기때문에 실제 코딩에서 with문을 사용하면 많은 양의 타이핑을 절약할 수 있다

 폼접근법

frames[1].document.forms[0].address.value

 with(frames[1].document.forn[0]){     name.value ="";     adress.value="";     email.value="";  }


with를 사용하는 자바스크립트 코드는 최적화가 어렵기 때문에 코드가 느리게 실행될 수 있으므로 아래와 같은 방법을 추천한다.

var form = frame[1].document.forms[0];
form.name.value = "";
form.address.value = "";
form.email.value = "";



6.19 빈문장
빈문장은 몸체가 없는 루프를 생성할때 유용하게 쓰인다.

 


6.20 자바스크립트 문장 요약


 

'나홀로스터디 > JS 완벽가이드' 카테고리의 다른 글

함수  (0) 2014.10.27
객체와 배열  (0) 2014.10.20
표현식과 연산자  (0) 2014.10.13
변수  (0) 2014.10.07
데이터 타입과 값  (0) 2014.10.01
Copyright © HuckleberryM All Rights Reserved | JB All In One Designed by CMSFactory.NET