조건문 (conditional statements)
if, switch 구문
비교 연산자
비교 연산자의 가장 기본적인 사용법은 두 값을 비교하여 true나 false 값을 얻어내는 것이다.
==, ===, !=, !==, >, >=, <, <=
논리 연산자
비교 연산자는 주로 true나 false 중 하나의 값을 리턴한다. 논리 연산자는 둘 이상의 비교 연산자의 결과를 비교하기 위해 사용한다.
&&, ||, !
- 단축 평가(short-circuit evaluation) : 두 개 이상의 조건을 평가할 때 첫 번째 조건을 평가한 결과가 전체 평가 결과를 좌우한다면 두 번째 조건을 평가하지 않는 동작 방식을 말한다. 예를 들면 false && 표현식 혹은 true || 표현식인 경우 다른 결과를 계속 판단해야 할 이유가 없다.
if 구문
if 구문은 조건식을 평가(혹은 검사)하는 구문이다. 만일 조건식이 true라고 판단되면 그 이후의 코드 블록 내의 코드들이 실행된다.
if-else 구문
조건식을 검사하여 true로 판단되면 if 코드 블록이 실행된다. false로 판단되면 else 코드 블록이 실행된다.
switch 구문
switch 구문은 스위치 값(switch value)이라고 부르는 변수와 함께 시작한다. 각각의 case 구문은 이 변수가 가질 수 있는 값을 가르키며, 코드는 변수 값이 일치할 때만 실행된다.
switch (level) {
case 'One':
title = 'Level 1';
break;
case 2:
title = 'Level 2';
break;
default:
title ='Test';
break;
}
타입 강제와 약한 형식화
자바스크립트는 내부적으로 데이터 타입을 변환하여 작업을 완료할 수 있다. 이를 타입 강제(type coercion)라고 한다.
자바스크립트는 약한 형식화(weak typing)를 사용한다고 말할 수 있는데, 그 이유는 값의 데이터 타입이 바뀔 수 있기 때문이다. 강력한 형식화(string typing)를 사용하는 일부 다른 프로그래밍 언어들은 각각의 변수가 어떤 데이터 타입을 사용할 것인지를 명시하도록 규정하고 있다.
true 혹은 false로 취급되는 값들
false로 취급될 수 있는 값들
var highScore = false; // 전형적인 불리언 false
var highScore = 0; // 숫자 0
var highScore = ''; // NaN(Not a Number, 숫자가 아님)
var highScore = 10/'score'; // 빈 값
var highScore; // 아직 값을 대입하지 않은 변수
이를 제오한 거의 모든 값들은 true로 취급할 수 있다.
var highScore = true; // 전형적인 불리언 true
var highScore = 1; // 0이 아닌 다른 숫자
var highScore = 'carrot'; // 내용을 가진 문자열
var highScore = 'true' // 문자열로 표현된 true
var highScore = 'false' // 문자열로 표현된 false
var highScore = '0' // 문자열로 표현된 0
var highScore = 10/5; // 계산된 숫자
단축 평가 값
논리 연산자들은 왼쪽 오른쪽 순서로 실행된다. 이 연산자들은 결과를 얻게 되는 순간 단축 평가(즉, 평가의 중단)를 실행한다. 그러나 그 결과값은 (반드시 true 또는 false가 아니라)평가를 중단하게 된 계기가 된 값을 리턴한다.
개발자들은 이런 특징을 창의적으로 활용한다. 예를 들어, 변수 값을 대입하거나 혹은 새로운 객체를 생성한다.
var nickName = '';
var nickNameA = (nickName || '손님');
var nickName = '';
var nickNameA = (nickName || {});
다음 예제를 살펴보자. 세 개의 값을 정의한다. 만일 이 세 값 중 어느 하나라도 true로 취급될 수 있으면 if 구문 내의 코드가 실행될 것이다. valueB를 만나게 되면, 숫자 1은 true로 취급될 수 있기 때문에 단축 평가가 실행되어 연산이 종료되고 if 구문 내의 코드 블록이 실행된다.
valueA = 0;
valueB = 1;
valueC = 2;
if (valueA || valueB || valueC){
// code block
}
논리 연산자를 사용할 때 다음과 같은 내용을 고려하면 좋다.
- OR 연산자를 사용할 때는 true를 리턴할 가능성이 높은 코드를 첫 번째 조건으로 작성하고, AND 연산자를 사용할 때는 false를 리턴할 가능성이 높은 코드를 첫 번째 조건으로 작성한다.
- 평가를 수행할 때 비용이 많이 필요한 코드는 가능한 나중에 평가되도록 작성하여 코드가 실행되지 않도록 한다.
루프
루프는 조건을 검사하여 true이면 코드블록을 실행한다. false를 리턴할 때까지 계속해서 반복된다.
- for : 일정한 횟수만큼 코드를 반복 실행해야 한다면 for 루프가 가장 적합
- while : 반복 실행할 횟수를 정확히 알지 못한다면 while 루프를 사용하는 것이 좋다.
- do while : while 루프와 비슷하지만 한 가지 차이점이 있다. 조건식이 false를 리턴하더라도 우선 코드 블록을 한 번 실행한 후 루프를 시작한다.