개발 직군 면접으로 자바스크립트 퀴즈를 풀다가 다음과 같은 문제가 나왔습니다.

 

foo.x의 값은 무엇인가요?

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

bar의 값이 무엇인지도 생각해 보면 좋을 것 같습니다.

 

 

처음에는 풀지 못했지만 stackoverflow를 참고해서 이해하고 아래에 정리를 해두려고 합니다.

혹시 제가 잘못 이해하고 있다면 댓글로 알려주시기 바랍니다!

https://stackoverflow.com/questions/32342809/javascript-code-trick-whats-the-value-of-foo-x

 

JavaScript code trick: What's the value of foo.x

I found this problem in a GitHub front-end interview questions collection: var foo = {n: 1}; var bar = foo; foo.x = foo = {n: 2}; Question: What is the value of foo.x? The answer is undefined. I...

stackoverflow.com

 

  • 원칙 1 : 코드는 한 줄씩 실행된다
  • 원칙 2: 할당이 이루어지는 같은 줄의 코드는 오른쪽에서 왼쪽으로 순서가 진행된다

 

마지막 줄이 작동하는 순서를 풀어보면 다음과 같습니다.

foo.x = foo = {n: 2}
{n: 1}.x = ( {n: 1} = {n: 2} )
{n: 1}.x = {n: 2}
{n: 1, x: {n: 2}}
  • 실행되기 전 foo의 값은 {n:1}로 확정
  • 마지막 결과값은 예전 foo가 참조하는 값이라서 bar가 참조하는 값이 됨
  • 이제는 새로운 foo가 {n:2}가 됨
  • 새롭게 코드를 console.log(foo.x) 로 치면 {n:2}에 x가 없으므로 foo.x는 undefined가 됨

프론트 쪽 작업을 약간 하는 도중 왜 내가 만든 .env 파일 내 환경변수가 클라이언트 통신요청에 적용되지 않는가에 대해 8시간 고민함…

 

https://okky.kr/articles/1244252

 

OKKY - All That Developer

OKKY는 국내 최대 개발자 지식공유 플랫폼입니다. 개발자에게 필요한 기술 Q&A, 아티클, 커리어, 네트워킹, 취업, IT행사를 지원합니다

okky.kr

 

위의 글을 보고 큰 깨달음을 얻음.

 

애초에 클라이언트에서 서버쪽 환경변수에 마음대로 접근하겠다는 것은 말도 안되는 생각이고,

만약 필요하다면 서버에 요청해서 받던지,

아니면 클라이언트 요청을 서버로 끌고 와서 작업을 하던지

 

모든 파일을 같은 언어로 같은 공간에서 작업하다 보면 상식적인 부분을 놓치고 많은 시간을 허비할 수 있음.

 

프론트 작업은 따로 작업공간을 두고 package.json부터 .env 까지 전부 다른 폴더에서 관리하면 덜 헷갈림.

Assignment

  • sliceCityFromAddress 함수는 address 를 인자로 받습니다.
  • address 는 주소를 나타내는 string 입니다.
  • 주어진 주소에서 도시를 찾아 삭제하고 새로운 주소를 리턴해 주세요.
  • 도시는 무조건 ‘시’로 끝납니다. 예) “서울특별시”, “성남시”
  • ‘시’는 주소에 한번만 포함되어 있습니다.
  • 예를 들어, 다음과 같은 주소가 주어졌다면다음과 같은 값이 리턴되어야 합니다.

"경기도 성남시 분당구 중앙공원로 53" -> "경기도 분당구 중앙공원로 53"

 


 

위코드 자바스크립트 19번 과제다.

다른 풀이 방법을 보면 "시" 뿐만 아니라  "도"까지 생각하던데

그런 풀이가 맞는지 잘 모르겠다.

 

만약 "경기도" 옆에 "도기도"라는 새로운 도가 생기면 address.indexOf("도")는 달라지는 것 아닌가?

 

나는 이렇게 생각했다.

- 광역시, 특별시를 제외한 도시 이름 (예: 성남시) 앞에는 항상 공백이 존재한다.

- 광역시, 특별시는 주소 상 가장 앞에 온다.

 

그렇다면, 도시 이름의 첫번째 문자 인덱스를 찾으려면 (예: 성남시의 "성")

- "시" 에서 거꾸로 검사하여 처음 나오는 공백을 찾고 +1 한다.

- 전 단계에서 공백이 나오지 않으면 광역시, 특별시이므로 해당 인덱스는 0이다.

 

의식의 흐름을 쪼개어 공책에 순서대로 적어본다.

1. address 문자열을 인수로 받음

2. 인수에서 "시"로 끝나는 도시를 찾음 
  2-1. address.indexOf("시")
  2-2. 그 앞에 처음으로 나오는 공백(" ")을 찾는다.
  2-3. 공백이 없으면 도시 이름의 첫번째 글자 인덱스에 address[0]을 할당
  2-4. 도시 이름 문자의 시작과 끝의 인덱스를 모두 찾았다.

3. 도시를 address에서 삭제 -> 도시를 제외한 나머지 문자들을 연결한다.

4. 도시가 삭제된 결과를 리턴한다.

 

2-2번은 for 문을 거꾸로 돌리면 쉽게 해결되나

문제는 2-3번, <앞의 문자열에 공백이 없으면> 이라는 조건을 컴퓨터가 알아듣게 써줄 방법을 찾기가 어려웠다.

 

집으로 가는 전철에서 곰곰히 생각해보니 방법이 떠올랐다.

 

=> 첫번째 공백의 인덱스와 "시" 인덱스를 비교하는 분기를 추가한다. 

 

즉, 첫번째 공백이 "시"보다 먼저 있으면 "경기도 성남시" 같은 주소이고,

첫번째 공백이 "시"보다 나중에 있으면 "서울특별시 강남구" 같은 주소다.

 

코드는 다음과 같다.

function sliceCityFromAddress(address) {
  let cityNameLastChar = address.indexOf("시");
  let cityNameFirstChar;
  const blank = address.indexOf(" "); // address 배열에서 첫번째 공백 인덱스 번호

  if (cityNameLastChar === -1) {
    alert("주소에 도시를 포함해주세요.")
    return;
  }
  
  // console.log(cityNameLastChar)
  // console.log(cityNameFirstChar)
  // console.log(blank)
  
  if (blank > cityNameLastChar) {
    cityNameFirstChar = 0; // 첫번째 공백이 "시" 보다 나중에 있으면 도시 이름의 첫번째 문자 인덱스는 0
  } else { // 첫번째 공백이 "시" 보다 먼저 있으면
    for (let i = cityNameLastChar; i >= 0; i--) {
      if (address[i] === " ") {
      cityNameFirstChar = i + 1; // "시" 인덱스 번호에서 거꾸로 조회하여 빈문자열을 찾고 1 더한 값을 도시 이름의 첫번째 인덱스로 설정
      }    
    }
  }
  
  // console.log(cityNameLastChar)
  // console.log(cityNameFirstChar)
  // console.log(blank)

  const newAddress = address.slice(0, cityNameFirstChar) + address.slice(cityNameLastChar+2, address.length);
  
  return newAddress;
}
console.log(sliceCityFromAddress("경기도 성남시 분당구 중앙공원로 53"));
console.log(sliceCityFromAddress("서울특별시 강남구 선릉로 4"));
console.log(sliceCityFromAddress("서울 아주특별시 강남구 선릉로 4"));

 

이렇게 하면

"경기도 성남시 분당구 중앙공원로 53",

"서울특별시 강남구 선릉로 4",

"서울 아주특별시 강남구 선릉로 4"

같은 주소도 모두 처리할 수 있다.

(시흥시는 처리 못함..)

 

그렇지만 split, filter, join 메서드를 사용하여 문자열을 배열로 만드는 방법이 가장 깔끔한 것 같다. 

 

inline

전후 줄바꿈 없이 한 줄에 다른 요소와 나란히 배치

예) <span> <a> <em>

 

width 와 height 속성을 지정해도 무시됨

해당 태그의 컨텐츠의 크기만큼만 공간 차지

margin, padding 역시 좌우 간격만 반영되고 상하 간격은 반영되지 않음

block

전후 줄바꿈이 들어가 다른 요소를 다른 줄로 밀어내고 한 줄을 차지

예) <div> <p> <h1>

 

inline 과 달리 width, height, margin, padding 속성 모두 반영

inline-block

하이브리드

전후 줄바꿈 없이 한 줄에 다른 요소와 나란히 배치되나

width, height 및 margin, padding 속성 상하 간격 지정 가능

내부적으로 block 규칙을 따르면서 외부적으로 inline 규칙을 따름

 

 

<참고 포스팅>

CSS의 display 속성: inline, block, inline-block

 

CSS의 display 속성: inline, block, inline-block

Engineering Blog by Dale Seo

www.daleseo.com

 

position

레이아웃을 배치하거나, 객체를 위치시킬 때 사용하는 css 속성

상속되지 않으며 위, 오른쪽, 아래, 왼쪽의 위치를 같이 설정할 수 있음

 

static (기본값)

위치를 지정하지 않을 때 사용함

 

relative

위치를 계산할 때 static의 원래 위치부터 계산

일반적인 흐름에 따라 상하좌우 offset 적용가능

다른 요소에 영향을 주지 않음

 

absolute

원래 위치와 상관없이 위치를 지정할 수 있음. 단, 가장 가까운 상위 요소를 기준으로 위치가 결정된다.

일반적인 문서 흐름에서 배제됨

! relative 배치 요소는 문서 흐름 속에 남아 있지만 absolute 배치 요소는 전체적 문서 흐름에서 제외된다.

 

fixed

원래 위치와 상관없이 위치를 지정할 수 있음. 하지만 상위 요소에 영향을 받지 않기 때문에 화면이 바뀌더라도 고정된 위치를 설정할 수 있음. 브라우저 화면의 상대 위치를 기준으로 결정. 예) 네비게이션 바

 

sticky

일반적 문서 흐름에서 배제되고, 스크롤되는 가장 가까운 요소에 offset 적용

 

 

 

 

static, relative, absolute 차이

참고 포스팅

CSS position, relative 와 absolute 차이

 

CSS position, relative 와 absolute 차이

포지션(position) Html 문서에서 각 요소를 배치하는 방법에 대해 정의하는 속성이다. 즉 요소의 배치 방법을 결정하는 것이 포지션(position) 속성이다. 포지션(position) 속성이 각 요소의 배치 방법을

nonipc.com

참고한 포스트에서 소개한 코드를 직접 쳐봤다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    div.relative {
      position: relative;
      width: 500px;
      height: 300px;
      border: 5px solid blue;
    }
    div.absolute {
      /* position: relative; */
      /* position: absolute; */
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }
  </style>

</head>
<body>
  <h2>position: absolute;</h2>
  <p>가장 가까운 조상:</p>
  <div class="relative">relative;
    <div class="absolute">absolute;</div>
    <p>일반 문단 텍스트</p>
  </div>
</body>
</html>

div.absolute 스타일을 1) static, 2) relative, 3) absolute 로 바꿨을시 어떻게 변화하는지 확인해보자.

 

1) static

<코드>

div.absolute {
      /* position: relative; */
      /* position: absolute; */
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }

<결과>

 

2) relative

<코드>

div.absolute {
      position: relative;
      /* position: absolute; */
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }

<결과>

 

3) absolute

<코드>

div.absolute {
      /* position: relative; */
      position: absolute;
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }

<결과>

 

비교

 

static, relative, absolute 차이 (2번째 예시)

wrapper div 아래

input + img 묶여있음

1) static

<코드>

.wrapper {
  position: relative;
  width: 300px;
}

input {
  width: 100%;
  border: 1px solid #bbb;
  border-radius: 8px;
  padding: 10px 12px 10px 12px;
  font-size: 14px;
}

img {
/*   position: absolute; */
  width: 17px;
  top: 10px;
  right: 12px;
  margin: 0px;
}

<결과>

 

2) relative

<코드>

img {
  position: relative;
  width: 17px;
  top: 10px;
  right: 12px;
  margin: 0px;
}

<결과>

 

input 의 width가 100% 라서 img는 그 밑에 위치하게 되고

right offset 값으로 인해 옆으로 숨어버림

 

3) absolute

<코드>

img {
  position: absolute;
  width: 17px;
  top: 10px;
  right: 12px;
  margin: 0px;
}

<결과>

 

absolute 는 부모 요소인 wrapper (position: relative) 에 대해서 offset 값을 적용하고

다른 문서 요소의 흐름에 방해받지 않음

이때 right 대신 left offset 값을 주면?

 

<코드>

img {
  position: absolute;
  width: 17px;
  top: 10px;
  left: 12px;
  margin: 0px;
}

<결과>

 

결론

relative는 일반적인 문서 흐름상 자신이 위치해야 할 곳에서 시작하고
absolute는 부모 요소 위치에서 시작한다.

relative는 문서 흐름에 남아있으나
absolute는 전체적인 문서 흐름에서 제외된다.

 

Semantic Web / Tag

- 의미론적인 웹

- 기계가 이해할 수 있는 형태로 제작된 웹

- 웹에 존재하는 수많은 웹들의 메타데이터를 부여하여, 잡다한 데이터 집합이 아닌 ‘의미’와 ‘관련성’을 가지는 거대한 데이터 베이스를 구축하고자 하는 발상

 

semantic web을 고안해서 semantic tag들이 나오게 됨

ex) header, nav, section, article, aside, footer

 

img 태그와 background-image 속성의 차이

 

차이점 :

1. 대체 결과물 출력 여부

-> img 태그는 이미지 로딩이 실패할 때, alt=“대체 메시지”로 대체 결과물을 출력할 수 있으나 background-image는 안됨.

 

2. 성능

-> img 태그는 HTML 구문 분석될 때 요청이 이루어지므로 성능면에서 background-image 보다 좋다.

 

3. 검색 노출
-> img 태그는 검색 엔진에서 색인을 생성하여 검색시에 노출이 되지만 background-image는 자동으로 색인화하지 않기 때문에 검색 시 노출되지 않음.

 

결론적으로 img태그가 background-image 속성보다 더 semantic 하다고 볼 수 있다.

 

검색 시 노출 되도록 만들고 싶을때
콘텐츠에 관련이 있는 이미지일 때
웹페이지 성능을 높이고 싶을때
-> img 태그 사용

 

디자인 요소로만 이미지를 활용하고 싶을때
콘텐츠와 관련이 없어 이미지를 불러오지 못해도 상관없을때
-> background-image 속성 사용

 

 

https://daco2020.tistory.com/m/54

 

<img > 태그 와 {background-image} 의 차이를 알고 싶어?

웹페이지에 이미지를 넣는 방식은 크게 두 가지가 있다. 1번. HTML에서 태그를 활용해 넣는 방법. ​ 2번. CSS 에서 background-image 속성을 활용해 넣는 방법. { background-image: url("이미지 링크"); }​  ..

daco2020.tistory.com

Semantic Web, Semantic Tag 이해

 

Semantic Web, Semantic Tag 이해

semantic web, semantic tag에 대해 알아보도록 하겠습니다.

chanho-yoon.github.io

Semantic Web | PoiemaWeb

 

Semantic Web | PoiemaWeb

검색엔진은 대체로 h1 요소 내의 콘텐츠를 웹문서의 중요한 제목으로 인식하고 인덱스에 포함시킬 확률이 높다. 또한 사람도 h1 요소 내의 콘텐츠가 제목임을 인식할 수 있다. 시맨틱 요소로 구

poiemaweb.com

 

함수란?

처리해야 할 과제에 따라 기능별로 여러 명령을 묶어 놓은 것

특정 기능을 수행하는 소스 코드를 따로 묶어 놓은 덩어리

 

이벤트란?

웹 문서에서 버튼을 누르거나 이미지 위에 마우스 포인터를 올려 놓는 등의 사건

 


 

정리

  • 함수 선언
    function 예약어를 사용하여 중괄호 {} 안에 함수에서 실행할 여러 명령을 묶음
function addNumber() {
	var sum = 10+20;
    console.log(sum);
}

 

  • 함수 실행 (함수 호출)
    선언 후에 함수를 실행하는 소스가 따로 필요하다
    -> addNumber()
    결과는 30

  • 스코프 : 변수가 적용되는 범위, 어디까지 유효한가
    한 함수 안에서만 사용할 수 있는 변수 -> 지역/로컬 변수
    스크립트 소스 전체에서 사용할 수 있는 변수 -> 전역/글로벌 변수

  • (ES6 버전) let, const 예약어
    var 보완 목적

    헷갈리지만 지금까지 이해한 내용을 정리하면 다음과 같다. (코딩애플, yuddomack 블로그 참고)
예약어 재선언 재할당 범위
var O O function( ) { } 내에서만
let X O funciton( ) 포함 모든 { }내에서만
const X X funciton( ) 포함 모든 { }내에서만

 

- 재선언

var 이름;
var 이름; // 재선언 가능

let 나이;
let 나이; // 에러

const 성별 = "여자";
const 성별 = "남자"; // 에러

let, const 는 같은 이름의 변수를 두 번 이상 재선언할 수 없음

같은 이름 중복하여 실수 방지

 

- 재할당

var 이름 = "Kim";
이름 = "Park"; // 가능

let 나이 = 20;
나이 = 30; // 가능

const 성별 = "남자";
성별 = "여자"; // 에러

할당된 내용을 바꿔 재할당 -> var, let 가능하나 const 불가능

const는 상수, 일정한 값 -> 바뀌면 큰일 날 값을 저장하고 싶을 때 사용

 

- 범위

function 내에서 선언된 var 변수는 function 안에서만 존재

function 함수() {
	var 이름 = 'Kim';
    console.log(이름); // 가능
}

console.log(이름); // 에러

그런데  if문에서는?

if(true) {
	var 인사 = "안녕";
}
console.log(인사); // 가능

for문?

for(var i=0; i<5; i++) {
	var temp = i;
}
console.log(temp); // 가능, 결과 4

var 변수가 function 블록에서는 지역변수, function이 아닌 다른 블록에서는 전역변수가 된다?

 

"var는 함수 영역(레벨)의 스코프를 가지지만 let와 const는 블록 영역의 스코프를 가진다."

함수영역의 스코프라는 말이 아직 이해가 잘 가지 않는다.
함수 영역이란 것이 function ( ) { } 을 의미하는 것인지?

일단 var 변수는 function 내에서는 지역변수로 사용되고 다른 블록에서는 전역변수로 사용되는 것으로 이해하고 더 공부해보자.

 

  • 호이스팅 (hoisting)
    var 변수를 사용할 때, 변수의 선언과 할당을 분리해 선언 부분을 스코프의 가장 위쪽으로 끌어올림

var x = 100;

test();

function test() {
    console.log("x is "+x+", y is "+y);
    var y = 200;
}
// 결과는 x is 100, y is undefined

자바스크립트 해석기는 함수 소스를 훑어보면서 var 변수 선언된 것을 따로 기억해둠.

변수를 실행하기 전이지만 선언한 것 같은 효과.

오류 발견되지 않고 예상치 못한 결과가 나올 수 있음.

 

  • let과 constant 를 사용한 변수의 특징
    - 블록 안에서만 쓸 수 있음
    - 재할당은 가능하나 재선언은 할 수 없음
    - 호이스팅이 없는 변수

  • 변수 사용 가이드
    - 전역변수는 최소한으로 사용
    - var 변수는 함수의 시작 부분에서 선언
    - for문에서 카운터 변수를 사용할 때는 블록 변수를 사용하는 것이 좋음
    - ES6를 사용한다면 var보다 let을 사용

  • 매개변수 (parameter)
    함수를 실행하기 위해 필요하닥 지정하는 값
    -> function addNumber(a, b) { } 에서 a, b가 매개변수

  • 인수 (argument)
    매개변수에 실제로 할당할 값
    -> addNumber(2, 3); 에서 2, 3이 인수

  • 함수의 return문
    결과값을 다른 계산에 적용하거나 다른 곳에 표시해야 할 경우
    함수를 실행한 수 그 결과값을 함수 밖으로 넘기는 것을 '함수값을 반환한다(return)'라고 함

2022.07.18 - [JavaScript] - [JavaScript] 왜 return을 사용해야 하지?

 

[JavaScript] 왜 return을 사용해야 하지?

생활코딩 WEB2 JavaScript를 수강 중입니다. 해당 글은 강의 내용을 개인적으로 정리한 것이기 때문에 보다 정확한 내용은 원 강의를 참고 부탁드립니다. https://youtu.be/6MzCHO8M3Uc #1 매개변수와 인자 (Pa

study-practice.tistory.com

 

 

  • 익명 함수
    이름 없는 함수
    실행하려면 할당된 변수를 함수 이름처럼 사용

var add = function(a,b) {
	return a+b;
}

var sum = add(10,20);

 

  • 즉시 실행 함수
    함수를 정의함과 동시에 실행하는 함수
    함수 선언 소스 전체를 괄호로 묶는다고 생각
    즉시 실행 함수는 식이기 때문에 소스 끝에 세미콜론 붙여줘야 함
var result = (function() {
	return 10+20;
}());
console.log(result);
// 결과는 30

매개 변수가 필요하면 인수도 넣어서 실행

var result = (function(a,b) {
	return a+b;
} (10,20));
console.log(result);
// 결과는 30

 

  • 화살표 함수
    ES6 부터는 => 이용하여 익명함수 선언을 간단하게 작성 가능

    매개변수가 없을 때:
    const hi = function() {return "안녕하세요?";} 
    const hi = () => "안녕하세요?";

    매개변수가 1개일 때:
    let hi = user => document.write(user+"님, 안녕하세요?");

    매개변수가 2개 이상일 때:
    let sum = (a,b) => a+b;

  • 이벤트 처리기
    이벤트 이름 앞에 on을 붙여서 사용
    ex) onclick


 

새롭게 알게 된 것들

  • alert() 함수는 내장함수이다

  • 자바스크립트에서는 함수 선언 부분을 가장 먼저 해석한다.
    따라서 선언한 위치에 상관없이 어디든 함수를 실행할 수 있다.
    보통 스크립트 소스의 앞부분이나 뒷부분에 함수 선언 소스를 모아 둔다.

  • function () 중괄호 안에서 변수 이름 앞에 var, let, const 예약어를 붙이지 않으면 전역변수가 된다 

  • ES6에서는 매개변수에 기본 값을 지정할 수도 있다

function multiple(a, b = 5, c = 10) { // b=5, c=10으로 기본 값 지정
	return a*b+c;
}
multiple(5, 10, 20) // a=5, b=10, c=20 결과는 70
multiple(10, 20) // a=10, b=20, c=10(기본값) 결과는 210
multiple(30) // a=30, b=5(기본값), c=10(기본값) 결과는 160

 

 

새롭게 알게 된 사실

  • if...else문을 만들 때 true가 될 경우가 많은 조건을 if문에 넣고, 다른 조건을 else문에서 처리하는 것이 좋다
    프로그램 실행 시간이 더 짧을 것

  • for문에서 반복 횟수의 기준이 되는 변수를 카운터 변수라고 한다
    보통 i라고 이름을 붙이고 0으로 초기화 한다
    반복문을 시작하기 전에 반드시 초기화 해야 한다
  • 여러 값을 차례로 순회할 때는 for...of문을 사용한다

let seasons = ["봄", "여름", "가을", "겨울"];
for(let value of seasons) {
	console.log(value);
}

결과는 봄 여름 가을 겨울

 

  • <script> 태그 안에서 HTML 태그를 사용하려면 쌍따옴표 안에 적는다
    ex) document.write("<br>");
  • for문은 횟수가 정해져 있는 반복 명령을 작성할 때 편리
    while문과 do...while문은 특정 조건을 만족하는 동안에만 명령을 반복

  • do...while문은 조건이 맨 뒤에 붙는다
    일단 문장을 한 번 실행한 후 조건을 확인한다

  • 어떤 반복문을 사용해야 할까?
    -> for문은 초기값이 있으면서 일정한 간격으로 반복할 때
    while문과 do...while문은 초기값, 반복 간격이 없고 조건만 주어짐
    while문과 do...while문의 차이는 조건 확인 전에 문장을 한 번 실행하느냐 안하느냐의 차이


 

정리

  • if
    조건이 true면 소스 실행, false면 소스 무시

  • if...else
    조건이 맞을 때 실행할 명령과 맞지 않을 때 실행할 명령이 따로 있다면 if...else 문 사용

  • 조건 연산자 : 물음표, 콜론
    -> 조건이 하나, 실행할 명령도 하나면 조건 연산자가 간단
    (조건) ? (true일 때 실행) : (false일 때 실행)

var score = 75;
(score >= 60) ? alert("통과") : alert("실패");

 

  • switch, case
    조건이 3개 이상일 때 사용
    break문은 명령을 실행한 다음에는 완전히 switch문을 빠져나오도록 한다
    default는 case 조건에서 전부 일치하지 않을 때 실행하는 명령
var session = prompt("관심 세션을 선택해 주세요. 1-마케팅, 2-개발, 3-디자인","1");

switch(session) {
	case "1" : document.write("<p>마케팅 세션은 <strong>201호</strong>에서 진행됩니다.</p>");
		break;
	case "2" : document.write("<p>개발 세션은 <strong>203호</strong>에서 진행됩니다.</p>");
		break;
	case "3" : document.write("<p>디자인 세션은 <strong>205호</strong>에서 진행됩니다.</p>");
		break;
	default: alert("잘못 입력했습니다.");
}

 

  • for
    값이 일정하게 커지면서 명령을 반복 실행할 때 편리한 반복문
    중첩가능

var sum = 0;
        
for (var i = 1; i < 6; i++) {
	sum += i;
}
document.write("1부터 5까지 더하면 " + sum);

1부터 5까지 더하는 프로그램

for(카운터 변수 선언; 조건식; 카운터 변수 조절) -> 선언, 조건, 조절

 

  • while, do...while
    특정 조건 만족하는 동안에만 명령 반복

var i = 0;
while (i<10) {
	document.write('반복 조건이 true이면 반복합니다. <br>');
    i += 1;
}
// while문

var i = 0;
do {
	document.write('반복 조건이 true이면 반복합니다. <br>');
    i += 1;
} while (i<10);
// do...while문

 

  • break
    break는 반복문의 흐름에서 바로 빠져나올 때 사용

for (i=0; i<10; i++) {
	document.write("*");
    break; // 이 지점에 오면 바로 반복문 종료
}

결과는 * 하나

 

  • continue
    주어진 조건에 맞는 값을 만났을 때 실행하던 반복 문장을 건너뛰고 맨 앞으로 되돌아 가서 반복 다시 시작

for (i=0; i<10; i++) {
	document.write("*");
    continue;
    document.write("continue문 때문에 이 문장은 건너뜁니다.");
}

결과는 * 10개

 

var n = 10;
var sum = 0;

for(var i=1; i<=n; i++) {
	if(i%2==1) {
    	continue;
    }
    sum += i;
    
    document.write(i + " ------ " + sum + "<br>");
}

10까지 짝수만 더하기

+ Recent posts