반응형

자바스크립트 기초 문법 정리.

 

참고 강좌 영상 : https://youtu.be/DuXA1t6hl3U

 

위 강좌 #12 ~ #14 를 참고하였다.

 

 


객체(Object)

아래와 같은 자료형을 객체라고 한다.

const superman = {
    name: 'clark',
    age: 33,
}

name을 key,

'clark'를 value(값)라고 한다.

* 마지막 쉼표는 선택이지만, 수정 시 용이하므로 넣는 걸로.

(근데 이제 JSON에서는 저러면 오류난다. 개빡쳐)

 

객체의 값을 CRUD하는 법

// Create
superman.gender = 'male';
superman['hairColor'] // 'black';

// Read
superman.name // 'clark';
superman['age'] // 33;

// Update
superman.name = 'tom';
superman['age'] = 17;

// Delete
delete superman.hairColor;

 

const superman = {
	name: 'clark',
    age: 33
}

superman.birthday; // undefined
'birthday' in superman; // false
'age' in superman; // true

프로퍼티 존재 여부 확인은 'in'을 이용하는데, key에만 사용할 수 있다.

 

 

for ... in 반복문

객체의 프로퍼티를 순회하면서 반복문을 사용할 수 있다.

for(let key in superman){
    console.log(key);
    console.log(superman[key]);
}

// name
// clark
// age
// 33

key가 'name'꼴의 string 자료형이라,

superman.key 는 사용할 수 없다.(superman.'name' 이 되니까.)

 

makeObject = (name, age) => {
    return {
        name: name,
        age: age,
    }
}

const Mike = makeObject('Mike', 30);
console.log(Mike);

name, age 인자를 받아 객체를 생성하는 함수이다.

 

method : 객체 프로퍼티로 할당된 함수

객체 안에는 값 뿐만 아니라 함수도 저장할 수 있다.

const superman = {
    name: 'clark',
    age: 33,
    fly: function() {
        console.log('fly');
    }
};

superman.fly();

// 축약형
const superman = {
    name: 'clark',
    age: 33,
    fly() {
        console.log('fly');
    }
};

 

메서드와 this

let boy = {
    name: 'Mike',
    showName: function() {
        console.log(boy.name);
    }
};

boy.showName();

위 코드는 문제가 있다.

let man = boy;

이렇게 선언하면 man 객체는 boy와 같은 정보를 가진다. 그런데,

boy = null;
man.showName();

boy에 null을 넣고 man에서 showName() 메서드를 실행하면 오류가 발생한다.

메서드 정의에서 boy.name을 불러올 수 없기 때문이다.

이때 boy.name 대신 this.name을 사용할 수 있다.

 

let boy = {
    name: 'Mike',
    showName: function() {
        console.log(this.name);
    }
};

객체 안에서 this는 객체를 담고 있다.

하지만 화살표 함수는 this를 가지고 있지 않다.

화살표 함수 내부에서 this를 사용하면 global, widnow와 같은 전역 변수를 불러온다.

따라서 객체의 메서드는 화살표 함수를 사용하지 않는 것이 좋다.

 

 

 

 

배열(Array)

numbers = [1, 2, 3, 4, 5];

numbers.length // 5 (요소 개수)

numbers.push(6); // 끝에 요소 추가
console.log(numbers); // [1, 2, 3, 4, 5, 6]

numbers.pop(); // 끝 요소 삭제
console.log(numbers); // [1, 2, 3, 4, 5]

numbers.unshift(-1, 0); // 앞에 요소 추가 (복수 가능)
console.log(numbers); // [-1, 0, 1, 2, 3, 4, 5]

numbers.shift(); // 앞 요소 삭제
console.log(numbers); // [0, 1, 2, 3, 4, 5]

 

배열을 쓰는 대표적 이유 중 하나는 반복문인데, 용례는 아래와 같다.

let days = ['mon', 'tue', 'wed'];

// 반복문 : for
for(let index = 0; index < days.length; index++){
	...
};

// 반복문 : for ... of
for(let day of days){
	...
};

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

자바스크립트 기초 문법 정리.

 

참고 강좌 영상 : https://youtu.be/b1tZWuLAcQU

 

위 강좌 #8 ~ #11 을 참고하였다.

 

 


 

반복문

 

for문

for(let i = 0; i < 10; i++){
  console.log(i);
}
// i=0에서 시작해서 반복마다 i에 1을 더하며, i가 10 미만인 경우 다시 반복하고 아니면 종료한다.

for(변수; 조건; 실행){

    반복할 코드

}

의 구조로 이루어져 있다.

 

값이 변하는 변수 i가 for문 안에서 let으로 정의되었다.

 

 

while문

let i = 0;

while(i<10){
  console.log(i);
  i++;
}

//i가 10 미만인 경우 계속 반복한다.

while(조건){

    반복할 코드

}

의 구조로 이루어져 있다.

 

반복할 코드 안에 '조건'를 종료시킬 수 있는 코드를 작성해야 한다.(예컨대 i++)

그렇지 않으면 조건에 아무런 변화가 없이 늘 true라서

무한루프가 실행된다.

 

 

do.. while문

let i = 0;

do {
  console.log(i)
  i++;
} while(i<10)

// do문 안의 코드를 while의 조건이 만족하는 한 계속 반복한다.

while문 과의 차이는,

while의 조건 판별보다 do문 실행이 먼저이므로

최소한 do문을 1번은 실행한다는 것이다.

 

 

break, continue

break : 실행 즉시 반복문을 빠져나온다.

continue : 실행 즉시 다음 반복을 실행한다.

// break문

while(true){
  let answer = confirm('계속 할까요?');
  if(!answer){
    break;
  }
}
// confirm 대화상자의 '확인' 클릭 시 반복, '취소' 클릭 시 '!answer == true'가 되어 break 실행.
// 반복문을 빠져나온다.
// continue문

for(let i = 0; i < 10; i++){
   if(i%2){
     continue;
   }
  console.log(i)
}

// i%2==0(false) 즉, 짝수이면 continue가 무시되고 console.log 실행.
// i%2==1(true) 즉, 홀수이면 continue가 실행되고 다음 반복으로 넘어감.

 

Tip!

for문 : 명확한 횟수가 정해져 있을 때.

while문 : 명확한 횟수가 정해지지 않았을 때.

사용하면 좋다.

 

 

 

 

switch문

if else문으로도 작성할 수 있는 switch문.

하지만 case가 몇가지로 분류될 때 간결한 코드 작성을 위해 사용할 수 있다.

 

잘못된 switch문의 사용부터 알아보자.

//잘못된 switch문
switch(fruit){
  case '사과' :
    console.log('100원 입니다.');
  case '바나나' :
    console.log('200원 입니다.');
  case '키위' :
    console.log('300원 입니다.');
  case '멜론' :
    console.log('500원 입니다.');
  case '수박' :
    console.log('500원 입니다.');    
}

// 해당 case 이하 모든 코드를 실행한다.

해당하는 case로 이동하는 것은 성공하지만, 그 이하 모든 코드를 실행한다.

따라서 해당하는 case의 코드만 실행하고 싶다면, 코드에 break문을 추가해야 한다.

 

올바른 switch문 사용 + default 사용(예외처리)

let fruit= prompt('무슨 과일을 사고 싶나요?');

switch(fruit){
  case '사과' :
    console.log('100원 입니다.');
    break;
  case '바나나' :
    console.log('200원 입니다.');
    break;    
  case '키위' :
    console.log('300원 입니다.');
    break;     
  case '멜론' :
  case '수박' :
    console.log('500원 입니다.');    // 가격이 같은 과일 묶기
    break;     
  default  :
    console.log('그런 과일은 없습니다.');
}

모든 case에 해당하지 않는 경우에 실행할 코드는 'default'로 작성한다.

 

 

 

 

함수

반복해서 실행하는 코드를 묶어서 '함수'로 정의할 수 있다.

 

function sayHello(a, b, c)

    console.log(`Hello, ${a}, ${b}, and ${c}!`);

}

 

function : 함수 정의

sayHello : 함수명

a, b, c : 매개변수(인자)

 

 

매개변수가 있는 함수 작성

function sayHello(name){
  let msg = `Hello, ${name}`;
  if(name){
    msg += name;
  }
  console.log(msg);
}

sayHello() // "Hello"
sayHello("Woojin") // "Hello, Woojin"

매개변수를 입력하지 않으면 name == undefined가 되어 if문이 실행되지 않는다.

 

* msg라는 변수는 함수 안에서 선언된 '지역 변수'이다.

함수 외부에서는 정의되지 않는다.

 

 

전역 변수와 지역 변수

 

반대로 함수 밖에서 정의되는 변수는 '전역 변수'로, 함수 내부에서 사용할 수 있다.

전역 변수를 함수 내부에서 재정의하면, 함수 밖에서도 적용된다.

 

let은 중복 선언이 불가능하고 재정의(수정)만 가능했다.

그런데

전역으로 let a = 1;

지역으로 let a = 2;

라고 작성하면

전역변수 a와 지역변수 a가 각각 선언되며, 서로 간섭하지 않는다.

 

매개변수 또한 지역변수로, 전역변수로 같은 이름의 변수가 선언되어도 영향을 받지 않는다.

 

Tip!

전체 서비스에서 공통적으로 사용하는 변수 외에는 '지역 변수'로 사용하는 것이 좋다.

 

 

result (결과값 반환)

함수의 결과값을 반환할 때는 result를 사용한다

function add(num1, num2){
  return num1 + num2;
}

console.log(add(1,2)); // 3

함수를 실행하면 return에 해당하는 값을 반환한다.

 

function showError(){
  alert('에러가 발생했습니다.');
}

console.log(showError()); // undefined

return을 정의하지 않은(또는 return만 적혀 있으면) 함수는 undefined를 반환한다.

return; 을 종료 목적으로 작성할 수도 있다.

 

Tip!

- 함수는 한 번에 한 작업만

- 읽고 파악하기 쉽게 네이밍 (JS는 카멜 표기법 사용 -> 낙타처럼 getName 대문자로 구분)

 

 

 

 

함수 표현식 & 화살표 함수

 

호이스팅

sayHello():

funtion sayHello(){
	console.log('Hello');
}

이 함수는 동작한다.

왜냐하면, Javascript는 코드 실행 시 선언된 모든 함수 코드를 먼저 실행하고 나머지 코드를 실행하기 때문이다.

이를 호이스팅(hoisting)이라고 한다.

 

이 순서를 거스를 수 있는 방법이 '함수 표현식' 이다.

 

 

함수 표현식

let sayHello = function(){
	console.log('Hello');
}

위와 같은 코드를 '함수 표현식'이라고 한다.

호이스팅에 걸리지 않고, 해당 코드에 도달해야 함수가 선언된다.

 

귀찮으니 그냥 함수 선언문을 사용하자.

 

 

화살표 함수

//함수 선언문
function sayHello(name){
  let msg = `Hello, ${name}`;
  if(name){
    msg += name;
  }
  console.log(msg);
}

//화살표 함수
const sayHello = (name) => {	// 매개변수 1개는 괄호 생략 가능
  let msg = `Hello, ${name}`;
  if(name){
    msg += name;
  }
  console.log(msg);
}

 

return문이 한 줄인 경우 더 간단하게 축약이 가능하다.

//함수 선언문
function add(num1, num2){
	result = num1 + num2;
}

//화살표 함수
const add = (num1, num2) => {
	return = num1 + num2;
}

//화살표 함수(더 축약)
const add = (num1, num2) => num1 + num2;

 

 

반응형
반응형

 

 

공부했던 C와 python과는 사뭇 다른 JS의 문법.

기초 강좌를 보고 정리해보자.

 

참고 강좌 영상 : https://youtu.be/P0FY8k916e0

위 영상 #1 ~ #7 까지의 내용을 참고하였다.

 

 

 

변수

// let은 중복 선언 불가, 재정의 가능
let num = 1;

console.log(num) // 1
let num = 2; // error

num = 2;
console.log(num) // 2

// console.log는 print 역할

let은 중복 선언 불가, 재정의 가능

 

// const는 중복 선언 불가, 재정의 불가
const NUM = 1;

console.log(NUM) // 1
const NUM = 2; // error

const = 2;
console.log(NUM) // error

Tip!

- 변수 선언은 웬만하면 const로 하고, 변경 필요한 변수를 let으로 바꾼다.

- const로 선언한 변수명은 대문자로 한다.

 

 

 

 

자료형

// 숫자형
const age = 30;

// 문자형
const name1 = "Mike";
const name2 = 'Mike';
const name3 = `Mike`;

message = `My name is ${name1}`;

console.log(message) // "My name is Mike";

// 논리형
const a = 1;
console.log(a == 1) // true

// null 과 undefined
let a;
let b = null;

typeof a // undefined
typeof b // object --> null인데 오류임

참조가 필요한 경우 백틱을 사용한.

Windows는 '~'를 shift 없이 누르면 나오는 문자를 사용한다.

MacOS도 마찬가지인데, ₩가 백틱으로 변환되어 나온다.

typeof 는 자료형의 타입을 알 수 있는 연산자이다.

 

 

 

 

대화상자

기본 대화상자에 대해 알아보자.

alert("message") // message를 포함하는 단순 alert 모달 발생.
prompt("message") // message를 포함하여 사용자의 입력을 받는 모달 발생.
confirm("message") // message를 포함하여 사용자가 확인/취소를 누를 때 true/false 입력을 받는 모달 발생.

prompt("message", "default") // default가 사용자 입력 디폴트 값으로 뜬다.

 

 

 

 

형변환

String() : 문자형으로 변환

Number() : 숫자형으로 변환

Boolean() : 불린형으로 변환

 

* prompt로 입력 받은 숫자는 '문자형'으로 저장된다.

  이때, 문자형으로 저장된 '숫자'에 사칙연산을 실행하면 숫자가 된다.

const a = prompt("input1") // 1
const b = prompt("input2") // 2

console.log(a + b) // 12
console.log((a+b)/2) // 6

 

평균을 구하고 싶다면 각 input에 Number() 연산자를 사용하면 된다.

const a = Number(prompt("input1")) // 1
const b = Number(prompt("input2")) // 2

console.log(a + b) // 3
console.log((a+b)/2) // 1.5

 

불린형으로 변환에서

0, '', null, undefined, NaN --> false

나머지 --> true

 

여기서 ''는 false이지만, ' '는 공백이 포함된 문자열로 true가 됨에 유의하자.

 

 

 

 

기본 연산자

+ : 덧셈

- : 뺄셈

* : 곱셈

/ : 나눗셈

 

% : 나머지 연산

// : 몫 연산

** 제곱

 

수학 연산 순서와 같이 제곱, 곱셈/나눗셈, 덧셈,뺄셈 순서로 연산이 실행된다.

따라서 적절한 괄호의 사용이 필요하다.

 

 

 

 

비교 연산자

비교 연산자의 결과는 불린형으로 반환된다.

const a = 1;
const b = 2;

a == b // 동등 연산자, false
a > b // false
a < b // true
a >= b // false
a <= b // true
a != b // true

const c = String(a);
a == c // true
a === c // 일치 연산자로 타입까지 비교함, false

 

 

 

 

조건문

if, else, else if 의 사용을 알아보자.

const age = 30;

// if만
if(age > 19){
	console.log('환영합니다.');
}

// if, else if, else
if(age > 19) {
	console.log('환영합니다.');
} else if(age === 19) {
	console.log('수능 잘 보세요!');
} else {
	console.log('안녕히 가세요.');
}

 

 

 

 

논리 연산자

AND : &&

OR : ||

NOT : !

 

const a = 1;
const b = 2;

a === 1 && b === 2 // true
a === 1 || b === 3 // true

console.log(!a) // false (1은 boolean에서 true로 변환됨)

 

AND와 OR의 중첩에서 'AND 연산이 우선'됨에 유의하자.

 

const a = 1;
const b = 1;
const c = 1;

console.log(a == 1 || b == 0 && c == 0) // true

연산이 순서대로 진행된다면 true || false 에서 true가 되고 다시 true && false 에서 false가 되어야 한다.

하지만 && 가 먼저 계산되므로 false && false에서 false, 다시 true || false에서 true가 된다.

 

Tip

AND(&&)는 false가 나오면 연산을 종료한다.

OR(||)은 true가 나오면 연산을 종료한다.

 

AND를 사용할 때,

'운전면허가 있는 여군' 보다는

'여군이면서 운전면허소지' 가 연산 최적화에 알맞다.

'여군' 이라는 조건에서 더 많은 case는 false를 반환하고 연산을 종료할 것이기 때문.

 

조건문을 사용할 땐 연산 최적화를 고려하자.

 

 

 

 

 

1편 끝 ~

 

 

 

 

 

 

반응형

+ Recent posts