Skip to content

Latest commit

 

History

History
194 lines (189 loc) · 5.55 KB

File metadata and controls

194 lines (189 loc) · 5.55 KB

JavaScript Math.random()의 실용 예

// 두 인자는 number 타입이어야 한다. validation 루틴은 생략.
function radomNumber( scale, base ){
  scale = scale || 2;
  base = base || 0;

  // scale == 1 이면 난수의 발생의 의미가 없다.
  if(scale === 1){
    return base;
  }

  return Math.floor( ( Math.random() * scale ) + base );
}
// 두 인자는 number 타입이어야 한다. validation 루틴은 생략.
function randomRange( num1, num2 ) {
  var min, max;

  // num1, num2 두 수의 차이가 0이면 난수의 발생의 의미가 없다.
  if(num1 === num2){
    return num1;
  }

  if (num1 < num2) {
    min = num1;
    max = num2;
  } else {
    min = num2;
    max = num1;
  }
  return randomNumber( (max - min + 1), min);
}

JavaScript Operator (추가)

in

// string형 값인 property_name과 같은 이름의 property을 obj가 소유하고 있다면
// true를 반환, 아니면 false를 반환.
/* property_name */ in /* obj */

JavaScript Flow Controls

condition

if, else

if ( /* 결과값이 boolean형인 표현식1 */ ) {
  /* 표현식1이 true일 경우 실행될 문장*/
} else if (/* 결과값이 boolean형인 표현식2 */) {
  /* 표현식1이 false이면서 표현식2가 true일 경우 실행될 문장 */
} else {
  /* 표현식1과 표현식2가 모두 false일 경우 실행될 문장 */
}

switch

switch( /* 표현식 */ ){
  case /* 표현식의 기대 결과 */ : /* 실행문 */
  case /* 표현식의 기대 결과 */ : /* 실행문 */
  case /* 표현식의 기대 결과 */ : /* 실행문 */
  default : /* 실행문 */
}
// 각 case의 실행문과 다음 case 사이에 break;를 넣어주지 않으면 조건에 부합한 case부터 마지막 case 또는 default까지의 실행문이 전부 실행된다.

thenary operator

/* 결과값이 boolean형인 표현식 */ ? /* 표현식이 true일때 실행될 표현식 */ : /* 표현식이 false일때 실행될 표현식 */

loop

while

while( /* 결과값이 boolean형인 표현식 */ ) {
  /* 표현식이 true이면 실행될 문장 
   * 문장이 끝나면 다시 표현식을 평가한다.
   */
}

do...while

do {
  /* 최소 1회 실행된후 
   * 표현식이 true면 다시 실행.
   * 문장이 끝나면 표현식을 평가한다.
   */
} while ( /* 결과값이 boolean형인 표현식 */ )

for

// 기본적으로 for문의 세 선언부는 필수가 아니다.
// 그러나 비워둘 경우 실용성이 없다.
for ( /* 변수 선언부, for문 진입시 최초 1회만 실행 */ ; /* 결과값이 boolean인 표현식1, for문 따라 반복평가 */ ; /* 표현식2, for문 따라 반복실행 */ ) {
  /* 표현식1이 ture이면 실행될 문장
   * 문장이 끝나면 표현식1을 재 평가.
   */
}

for...in

for (/* cursor */ in /* obj */) {
  /*
   * cursor에 obj의 가시적 프로퍼티중 하나의 이름(문자열값)을 대입한다.
   * obj[cursor] 와 같은 형태로만 참조할 수 있다.
   * obj엔 object, array등이 올 수 있다.
   * obj 내의 모든 가시적 프로퍼티들을 전부 순회할 때 까지 반복.
   */
}

for...in의 상속된 property issue

for (/* cursor */ in /* obj */) {
  // 이 if문을 통해 obj 고유의 property만을 걸러낼 수 있다.
  if obj.hsOwnProperty(cursor)
}

for...of

for (/* cursor */ of /* obj */) {
  /*
   * cursor에 obj의 가시적 프로퍼티중 하나의 이름(문자열값)을 대입한다.
   * obj[cursor] 와 같은 형태로만 참조할 수 있다.
   * obj엔 array, map등 유사배열객체가 올 수 있다.
   * 그러나 object등 property에 순서가 없는 객체는 올 수 없다.
   * obj 내의 모든 가시적 프로퍼티들을 전부 순회할 때 까지 반복.
   */
}

jumping

continue

기본 사용법

label1: /* 실행문 */
label2: /* 실행문 */
continue /* lable */; // 해당 label로 실행 루틴을 강제 이동시킨다.

반복문 내부에서의 응용법

while( /* ... */){
  /* 실행문 */
  if( /* ... */){
    continue; // if의 조건이 true 일때 당회 반복문의
              // 나머지 실행문을 무시하고 차회 반복으로 진입한다.
  }
  /* 실행문 */
}

break

기본 사용법

label1: {
  /* 실행문 */
  label2: {
   /* 실행문 */ 
   break /* lable */; // 해당 label의 block 밖으로 루틴을 강제 이동시킨다.
                      // continue와는 다르게 label block 안에 있어야 한다.
                      // break문 뒤의 나머지 실행문들은 무시된다.
   /* 실행문 */ 
  }
  /* 실행문 */
}

반복문 내부에서의 응용법

while( /* ... */){
  /* 실행문 */
  if( /* ... */){
    break; // if의 조건이 true 일때 당회 반복문의
           // 나머지 실행문을 무시하고 차회 실행도 무시하며
           // 반복문 밖으로 나간다.
  }
  /* 실행문 */
}

error handling

try {
  /* 문 */
} catch(error) {
  /* try 내의 문장에서 실행 오류가 발생한 경우
   * error 핸들링 메시지 수행
   * throw문이 주로 쓰인다.
   */
} finally {
  /*
   * 에러 발생 여부와 상관 없이 try 문이 종료 된 후 실행된다.
   */
}

Object.create()

var newObj = Object.create(proto[, propertiesObject]);
// proto를 상속하는 새로운 객체를 만들어 반환한다.
// 옵션으로 열거형 객체 propertiesObject를 제공하면 proto에서 상속받는 property 외에 새 객체 고유의 property를 만들 수 있다.