Javascript Control Flow
1. 블록 구문(Block statement)
중괄호로 범위가 정해진 구문을 블록 구문이라고 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function foo ( ) { var x = 1 , y = 2 ; console .log(x + y); } foo(); var obj = { x: 1 , y: 2 }; console .log(obj.x + obj.y);var x = 0 ;while (x < 10 ) { x++; } console .log(x);
2. 조건문 (Conditional statement)
조건식을 가지고 코드블럭을 실행할지 않할지에 대한 의사결정을 하는 것이다.
프로그래밍은 요구사항의 집합을 분석하여 적절한 자료구조와 함수의 집합으로 변환한 후 그 흐름을 제어하는 것이다.
2.1 if 문
if문을 통하여 논리적 참, 거짓을 구별한다.
1 2 3 4 5 if (조건문) { } else { }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 var hour = 20 ;var greeting;if (hour < 18 ) { greeting = 'Good day' ; } console .log(greeting);if (hour < 18 ) { greeting = 'Good day' ; } else { greeting = 'Good evening' ; } console .log(greeting);if (hour < 10 ) { greeting = 'Good morning' ; } else if (hour < 20 ) { greeting = 'Good day' ; } else { greeting = 'Good evening' ; } console .log(greeting);
2.2 switch 문
switch변수의 값과 일치되는 case문으로 실행 순서가 이동하게 된다. 일치하는 값이 없다면 default로 이동한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var color = 'red' ;switch (color) { case 'yellow' : console .log('yellow color' ); case 'red' : console .log('red color' ); case 'blue' : console .log('blue color' ); default : console .log('unknown color' ); }
이렇게 하면 break를 선언하지 않았기 때문에 red,blue,unknown까지 출력이된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var color = 'red' ;switch (color) { case 'yellow' : console .log('yellow color' ); break ; case 'red' : console .log('red color' ); break ; case 'blue' : console .log('blue color' ); break ; default : console .log('unknown color' ); }
3. 반복문(Loop)
주어진 조건식이 참인 경우 코드 블록을 반복해서 실행한다.
3.1 for 문
for문은 특정 조건이 거짓으로 판별될 때까지 반복한다.
1 2 3 for ([초기문]; [조건문]; [증감문]) { 구문; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 var array = ['one' , 'two' , 'three' , 'four' ];for (var i = 0 ; i < array.length; i++) { console .log('[' + i + '] = ' + array[i]); } for (var index in array) { console .log('[' + index + '] = ' + array[index]); } array.forEach(function (element, index, arr ) { console .log('[' + index + '] = ' + element); }); for (const element of array) { console .log(element); } for (const [index, value] of array.entries()) { console .log('[' + index + '] = ' + value); }
for문에 어떤 식도 선언하지 않으면 무한루프가 된다.
3.2 while 문
조건문이 거짓이 되면 실행을 종료하고 반복문을 빠져나간다.
조건문이 언제나 참이면 무한루프가 된다.
무한루프를 탈출하기 위해서는 break문을 사용한다. break문을 감싸는 반복문 하나를 탈출한다.
1 2 3 4 5 6 7 8 var i = 0 ;while (true ) { console .log(i); i++; if (i === 10 ) break ; }
3.3 do-while 문
코드블록은 조건문을 확인하기 전에 무조건 1회 실행된다. 그후 조건문을 확인한다.
1 2 3 4 5 var i = 0 ;do { console .log(i); i++; } while (i < 3 );
3.4 continue
continue문은 이후 구문의 실행을 스킵
하고 반복문의 조건문으로 이동한다.
예참조 -> 짝수에서는 console.log를 안한다.1 2 3 4 5 for (var i = 0 ; i < 5 ; i++) { if (i % 2 == 0 ) continue ; console .log(i); }
4. 평가(Evaluating)
일반적 표현식외에도 문자열, 숫자, 변수, 내장값등을 조건식으로 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 if (1 ) { console .log('1' ); } if ('str' ) { console .log('2' ); } if (true ) { console .log('3' ); } if (null ) { console .log('4' ); } var x = '' ;if (x) { console .log('5' ); } if (!x) { console .log('6' ); }
4.1 암묵적 강제 형 변환(Type coercion)
context를 고려하여 내부적으로 자료형을 강제 형변환시킨다.
1 2 3 4 5 6 7 console .log('1' > 0 ); console .log(1 + '2' ); console .log(2 - '1' ); console .log('10' == 10 ); console .log('10' === 10 ); console .log(undefined == null ); console .log(undefined === null );
4.2 Type Conversion Table
부정적 값은 = 0, false, undefined 등으로 나타내진다.
긍정적 값은 = 1, true 등으로 나타내진다.
4.3 Data type conversion
1 2 3 4 5 6 7 8 9 10 11 12 13 var val = '123' ;console .log(typeof val + ': ' + val); val *= 1 ; console .log(typeof val + ': ' + val); val += '' ; console .log(typeof val + ': ' + val);
val *= 1; // string에 수를 곱하면 type이 number로 변환된다. string->number
val += ‘’; // 숫자에 빈문자열을 더해준다. number->string
4.4 Truthy & Falsy values
아래 값들은 Boolean context에서 false로 평가된다.
false
undefined
null
0
NaN (Not a Number)
‘’ (빈문자열)
4.5 Checking equality
동등비교시 (==, !=)이 아닌 일치연산자(===, !==)을 사용해야한다.1 2 3 4 5 6 7 8 9 console .log(null == false );console .log(undefined == false );console .log(null == 0 );console .log(undefined == 0 );console .log(undefined === null );console .log(NaN == null );console .log(NaN == NaN );
4.6 Checking existence
객체나 배열(배열도 객체이다)이 값을 가지고 있으면 truthy value로 취급된다.
1 2 3 4 5 if (document .getElementById('header' )) { } else { }