제어문은 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다. 일반적으로 코드는 위에서 아래로 순차적으로 실행되지만 제어문을 사용하면 코드의 흐름을 인위적으로 제어할 수 있다.
블록문은 0개 이상의 문을 중괄호로 묶은 것으로 코드 블록 또는 블록이라고 부른다. 자바스크립트는 블록문을 하나의 실행 단위로 취급한다. 블록문은 단독으로 사용할 수도 있으나 일반적으로 제어문이나 함수 선언문에서 사용한다.
// 블록문
{
var foo = 10;
}
// 제어문
var x = 1;
if (x < 10) {
x++;
}
// 함수 선언문
function sum(a, b) {
return a + b;
}
조건문은 주어진 조건식(conditional expression)의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정한다. 조건식은 불리언 값으로 평가될 수 있는 표현식이다. 조건식의 평가 결과가 true이면 블록문이 실행되고, false이면 블록문이 실행되지 않는다.
var num = 2;
var kind = num ? (num > 0 ? '양수' : '음수') : '영';
반복문은 조건식의 평가 결과가 참인 경우 코드 블록을 실행한다. 코드 블록을 실행한 후 조건식을 다시 평가하여 여전히 참인 경우 다시 코드 블록을 실행한다. 이러한 과정이 반복되다가 조건식의 평가 결과가 거짓이 되면 반복문을 중단한다.
반복문을 대체할 수 있는 다양한 기능
- 배열을 순회할 때 사용하는 forEach 메서드
- 객체의 프로퍼티를 열거할 때 사용하는 for ... in 문
- ES6에서 도입된 for ... of 문 등
개발자가 의도적으로 타입을 변환하는 것을 명시적 타입 변환 또는 타입 캐스팅이라한다. 반대로, 개발자의 의도와 상관없이 표현식을 평가할 때 엔진에 의해 암묵적으로 타입이 변환되기도 하는데, 이를 암묵적 타입 변환 또는 타입 강제 변환이라 한다.
'Cat' && 'Dog' // -> "Dog"
이 때 논리곱 연산자는 논리 연산의 결과를 결정하는 두 번째 피연산자 'Dog'를 반환한다.
'Cat' || 'Dog' // -> "Dog"
논리합 연산자는 논리 연산의 결과를 결정한 첫 번째 피연산자 'Cat' 을 반환한다.
논리곱과 논리합 연산자는 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환한다. 이를 단축평가라고 한다. 단축 평가는 표현식을 해석하는 도중에 결과가 이미 확정된경우 나머지 해석을 생략하는 것을 말한다.